web-dev-qa-db-fra.com

Obtenir les entrées utilisateur à partir d'une zone de texte dans une application WPF

J'essaye d'obtenir l'entrée d'utilisateur de la zone de texte dans une application WPF que je construis. L'utilisateur entrera une valeur numérique et je voudrais la stocker dans une variable. Je commence juste sur C #. Comment puis-je le faire?

Actuellement, j'ouvre la zone de texte et laisse l'utilisateur entrer la valeur. Après cela, l'utilisateur doit appuyer sur un bouton sur lequel le texte de la zone de texte est stocké dans une variable.

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    var h = text1.Text;
}

Je sais que ce n'est pas bien. Quelle est la bonne façon?

9
crossemup

Comme @Michael McMullin l'a déjà dit, vous devez définir la variable en dehors de votre fonction comme ceci:

string str;

private void Button_Click(object sender, RoutedEventArgs e)
{
    str = text1.Text;
}

// somewhere ...
DoSomething(str);

Le fait est que la visibilité de la variable dépend de sa portée. Veuillez consulter cette explication .

16
duDE

Eh bien, voici un exemple simple de la façon de procéder avec MVVM.

Écrivez d'abord un modèle de vue:

public class SimpleViewModel : INotifyPropertyChanged
{
    private int myValue = 0;

    public int MyValue
    {
        get
        {
            return this.myValue;
        }
        set
        {
            this.myValue = value;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

Ensuite, écrivez un convertisseur, afin de pouvoir traduire votre chaîne en int et vice-versa:

[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");
    }
}

Ensuite, écrivez votre code XAML comme ceci:

<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>
6
Mattia Magosso

Vous pouvez également simplement donner un nom à votre contrôle:

<TextBox Height="251" ... Name="Content" />

Et dans le code:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        string content = Content.Text;
    }
3
bresleveloper
// 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);
}
0
Volodymyr Sichka