2015-09-14 13 views
6

私はビルド中のWPFアプリケーションのテキストボックスからユーザー入力を取得しようとしています。ユーザーは数値を入力し、変数に格納します。私はちょうどC#で始まっています。どのようにそれを行うにはどのようなアイデアですか?WPFアプリケーションのテキストボックスからユーザー入力を取得

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

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

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

私はこれが正しいとは限りません。誰にもアイデアはありますか?

string str; 

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

// somewhere ... 
DoSomething(str); 

ポイントは次のとおりです:変数の可視性は、その範囲に依存

+0

はあなたが番号の入力を変換しようとしているコードに名前を与えることができますか? –

+1

@crossemupボタンクリック後に変数に格納する値を保存する場合。あなたはそれを正しくやっています...なぜこれは正しいとは思わないのですか? –

+0

いいえ入力を数値に変換しようとしていません。入力自体は数値です。私はその数字を可変的に格納することを検討しています – crossemup

答えて

13

同様@Michael McMullinは、すでにあなたはこのようなあなたの関数の外で変数を定義する必要があると述べました。 this explanationをご覧ください。

+1

...イベントハンドラの内部でローカル変数が外に出てしまうので... [少なくとも、現在のアプローチが動作しない理由をOPが知っているので、答えを終了してください] ... – slugster

+0

'var h;'は動作しません。 ['var'(C#リファレンス)](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var)は、メソッドスコープでのみ使用できます。 –

+0

@Olivier Jacot-Descombesあなたは正しいです、私は編集しました。 – duDE

0
// 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); 
} 
4

ここでは、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> 

+0

私は何かを簡単にしようとしています:ボタンを押すと、テキストボックス内のテキストを示すメッセージボックスが表示されます。テキストボックス内のテキストを取得するだけで、これらをすべて行う必要がありますか?テキストボックスに直接アクセスしてgetText()などを呼び出すことはできませんか? – alxcyl

+0

これは非常に世俗的なもののためのコードの多くです。そして、なぜMVVM/MVCが嫌いなのだろう...しかし、素晴らしいプレゼンテーション。 – vapcguy

2

あなたも自分のコントロール

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

へと

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     string content = Content.Text; 
    } 
関連する問題