6

メソッドを呼び出したメソッドを動的にチェックするメソッドを使用して、配列内の値が変更さTextBoxれたときに、それぞれが配列内の対応する値を操作する複数の XAML があります。TextBoxC#TextBox

    <TextBox x:Name="_0_0" TextChanged="_x_y_TextChanged"/>
    <TextBox x:Name="_0_1" TextChanged="_x_y_TextChanged"/>
    <TextBox x:Name="_0_2" TextChanged="_x_y_TextChanged"/>
    // And so on.....

それぞれが配列内の対応する値を操作し、その値が変更されると、どのメソッドが呼び出されたTextBoxかを動的にチェックする C# メソッドを使用します。TextBox

    private void _x_y_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox current = (TextBox)sender;
        string currentname = current.Name;
        string rowstring = currentname.Substring(1, 1);

        string columnstring = currentname.Substring(3, 1);

        int row = Convert.ToInt32(rowstring);
        int column = Convert.ToInt32(columnstring);

        // I've then detected the name of the textbox which has called it...

したがって、この情報を使用して、からの情報をTextBox対応する配列インデックスに動的に格納することができます-またはそれを使ってやりたいことは何でも...

ただし、私の質問は次のとおりです。

TextBox関連するものを呼び出してそのテキストを更新するために、配列内のインデックスの場所を使用するメソッドを作成するにはどうすればよいですか?

4

4 に答える 4

8

FindName(string)次のように名前でテキスト ボックスを検索するために使用します (containerはすべてのテキスト ボックスを含むコントロールです)。

private void UpdateTextBox(int row, int column, string text)
{
    TextBox textBox = container.FindName("_" + row + "_" + column) as TextBox;
    if(textbox != null)
    {
        textbox.Text = text;
    }
}
于 2012-12-29T03:52:58.547 に答える
3

次の 2 つの方法があります。

管理するデータが多い場合、または配列の長さを予測できない場合は、手動で配列にデータを出し入れするのではなく、コレクションにバインドすることをお勧めします。配列を使用する代わりに ObservableCollection から派生したクラスを作成すると、 data <> ui の関係は非常に簡単です。

これを手動で行う必要がある場合は、インデックスをテキスト ボックスの「タグ」フィールドに貼り付けた方がよいでしょう。(a) xaml で明確に確認でき、(b) 簡単に解析でき、(c) ここで数式のバリエーションを使用した場合:

WPF ウィンドウ内のすべてのコントロールをタイプ別に検索します

ウィンドウ内のテキストボックスを繰り返し処理し、そのタグインデックスを見て正しいものを見つけることができます:

    foreach (TextBox t in FindVisualChildren<TextBox>(this))
    {
        if ((int) t.Tag)  == my_index )
        {
            t.Text = "my_text_goes_here";
         }
    }
于 2012-12-29T09:18:51.510 に答える
1

この質問に対する回答の方向に進みます: form anchor/dock 要するに、実際の値を保持するクラスを作成し、情報クラスを保持するコレクションを作成します。

次に、TextBoxes で "TextChanged" イベントを使用せず、テキストを保持するために使用される Dependency プロパティの変更を "スニッフィング" します。これは、Dependency プロパティで簡単に実行できます。

最後に、ItemsControl または ItemsPresenter を使用してコントロールを表示します。コントロールの数は、コレクション内のアイテムの数に従います。

于 2012-12-29T10:34:42.277 に答える
0

この問題を効果的に処理するには、MVVM パターン、データ テンプレート、および ItemsControl を使用することをお勧めします。

于 2012-12-29T05:35:28.423 に答える