0

約 60 個のテキスト ボックスがあり、それぞれに独自のコード セクションがあると混乱します。一部のイベント アクションは同じであり、他のイベントではアクションの辞書が存在する場合があります。問題は、テキストボックスを反復処理し、現在のテキストボックスの参照を取得し、現在のテキストボックスのテキストを変更するいくつかのメソッドを実行する方法がわからないことです。

UPD:私がやろうとしているのは、すべてAllTextboxesEnterのテキストボックスに、テキストボックスの名前に従ってテキストを変更するメソッドを実行AllTextboxesLeaveさせ、テキストボックスの名前に従ってアクション辞書からアクションを実行するメソッドを実行させることです。

4

4 に答える 4

4

このコードで試すことができます

foreach( var control in this.Controls.OfType<TextBox>() )
{
   control.Text = "";

} 
于 2012-08-31T16:45:41.877 に答える
2

質問されていることを理解していると思います:

更新しました

このバージョンは、デザイナー (シミュレートされた InitializeControls) を介して作成された TextBox で動作し、Dictionaries を使用してディクショナリで見つかった TextBox を見つけるため、より優れています。Controls.Find は、TextBox がサブコンテナーに含まれている場合に役立ちます。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

class Form1 : Form
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    private static readonly Dictionary<string, string> TextBoxEnterText = new Dictionary<string, string>
    {
        { "T1", "Enter T1" },
        { "T2", "Enter T2" },
        { "T3", "Enter T3" },
        { "T4", "Enter T4" },
        { "T5", "Enter T5" },
    };

    private static readonly Dictionary<string, string> TextBoxLeaveText = new Dictionary<string, string>
    {
        { "T1", "Leave T1" },
        { "T2", "Leave T2" },
        { "T3", "Leave T3" },
        { "T4", "Leave T4" },
        { "T5", "Leave T5" },
    };

    private void InitializeControls()
    {
        Controls.Add(new TextBox { Name = "T1", Location = new Point(10, 10) });
        Controls.Add(new TextBox { Name = "T2", Location = new Point(10, 40) });
        Controls.Add(new TextBox { Name = "T3", Location = new Point(10, 70) });
        Controls.Add(new TextBox { Name = "T4", Location = new Point(10, 100) });
        Controls.Add(new TextBox { Name = "T5", Location = new Point(10, 130) });
    }

    public Form1()
    {
        InitializeControls();

        foreach (string name in TextBoxEnterText.Keys)
            Controls.Find(name, true).First().Enter += textBox_Enter;
        foreach (string name in TextBoxLeaveText.Keys)
            Controls.Find(name, true).First().Leave += textBox_Leave;
    }

    static void textBox_Leave(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        textBox.Text = TextBoxLeaveText[textBox.Name];
    }

    static void textBox_Enter(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        textBox.Text = TextBoxEnterText[textBox.Name];
    }
}
于 2012-08-31T17:20:01.300 に答える
2

質問を正しく理解していると仮定すると、質問の解釈に対する私の答えは次のとおりです

private void Form1_Load(object sender, EventArgs e)
{
    foreach (TextBox tb in this.Controls.OfType<TextBox>())
    {
        tb.Enter += new EventHandler(textBoxAll_Enter);
        tb.Leave += new EventHandler(textBoxAll_Leave);
    }
}

private void textBoxAll_Enter(object sender, EventArgs e)
{
    ((TextBox)sender).Text = "textbox gained focus";
}

private void textBoxAll_Leave(object sender, EventArgs e)
{
    ((TextBox)sender).Text = "textbox lost focus";
}
于 2012-08-31T16:59:30.170 に答える
2

あなたの質問は明確ではありませんが、次のようなものが必要だと思います。

foreach (var textBox in Controls.OfType<TextBox>())
{
    textBox.Text = /* insert action here */
}

アクションの辞書がどこに来るのかは明らかではありません...

于 2012-08-31T16:45:33.013 に答える