web-dev-qa-db-ja.com

WPFアプリケーションのテキストボックスからユーザー入力を取得する

作成中のWPFアプリケーションのテキストボックスからユーザー入力を取得しようとしています。ユーザーが数値を入力し、変数に保存したいと思います。私はちょうどC#で始めています。どうすればいいですか?

現在、テキストボックスを開いて、ユーザーに値を入力させています。その後、ユーザーは、テキストボックスからのテキストが変数に保存されるボタンを押す必要があります。

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

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

私はこれが正しくないことを知っています。正しい方法は何ですか?

9
crossemup

@Michael McMullinが既に言ったように、関数の外部で変数を次のように定義する必要があります。

string str;

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

// somewhere ...
DoSomething(str);

ポイントは、変数の可視性はそのスコープに依存します。 この説明 をご覧ください。

16
duDE

さて、MVVMでこれを行う方法の簡単な例を次に示します。

まず、ビューモデルを記述します。

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

コントロールに名前を付けることもできます。

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

そしてコードでは:

    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