Ввода данных из TextBox в WPF-приложения
Я пытаюсь получить пользовательский ввод из текстового поля в приложении WPF, которое я создаю. Пользователь может ввести числовое значение, и я хотел бы сохранить его в переменной. Я только начинаю на C#. Как я могу это сделать?
В настоящее время я открываю текстовое поле и позволяю пользователю ввести значение. После этого пользователь должен нажать кнопку, на которой текст из textbox хранится в переменной.
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var h = text1.Text;
}
Я знаю, что это не правильно. Как правильно?
4 ответов
Как уже сказал @Michael McMullin, вам нужно определить переменную вне вашей функции следующим образом:
string str;
private void Button_Click(object sender, RoutedEventArgs e)
{
str = text1.Text;
}
// somewhere ...
DoSomething(str);
точка: видимость переменной зависит от ее области видимости. Пожалуйста, взгляните на данное объяснение.
Ну, вот простой пример того, как это сделать с MVVM.
Сначала напишите view-model:
public class SimpleViewModel : INotifyPropertyChanged
{
private int myValue = 0;
public int MyValue
{
get
{
return this.myValue;
}
set
{
this.myValue = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
затем напишите конвертер, чтобы вы могли перевести свою строку в int и наоборот:
[ValueConversion( typeof(int), typeof(string))]
class SimpleConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int returnedValue;
if (int.TryParse((string)value, out returnedValue))
{
return returnedValue;
}
throw new Exception("The text is not a number");
}
}
затем напишите свой код XAML следующим образом:
<Window x:Class="StackoverflowHelpWPF5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:[YOURNAMESPACEHERE]"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:SimpleViewModel></local:SimpleViewModel>
</Window.DataContext>
<Window.Resources>
<local:SimpleConverter x:Key="myConverter"></local:SimpleConverter>
</Window.Resources>
<Grid>
<TextBox Text="{Binding MyValue, Converter={StaticResource myConverter}, UpdateSourceTrigger=PropertyChanged}"></TextBox>
</Grid>
</Window>
вы также можете просто дать имя своему элементу управления:
<TextBox Height="251" ... Name="Content" />
и в коде:
private void Button_Click(object sender, RoutedEventArgs e)
{
string content = Content.Text;
}
// WPF
// Data
int number;
// Button click event
private void Button_Click(object sender, RoutedEventArgs e) {
// Try to parse number
bool isNumber = int.TryParse(text1.Text, out number);
}