多个文本框的点击事件

3

我需要一种方法,当一个人点击文本框中的一个时,文本框中的文本就会改变。我的网格是在一个名为textboxes[,]的变量中设置的,所以如果您键入textboxes[0,0],您将获得网格中的第一个框。目前,根据我的非常有限的知识,我有以下内容。

 for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {

                textboxes[i, j].Click += new EventHandler(textboxes_Click);

            }
        }

我可以处理每当一个框被点击时的事件。如果你有更好的方法,请告诉我。我只是不知道如何访问被点击的框,主要是其中的文本内容。希望我已经解释得足够清楚了。感谢所有的帮助!

-Lewis

4个回答

5
你的方法很好。你只需要定义一些额外的信息来处理事件,如下所示:
我们可以定义一个类来存储文本框的位置:
public class GridIndex
{
    //stores the position of a textbox
    public int ipos { get; set; }
    public int jpos { get; set; }
}

您的代码稍作修改:

您的代码稍加修改:

for (int i = 0; i < 8; i++)
  for (int j = 0; j < 8; j++)
  {
    textboxes[i, j].Click += new System.EventHandler(this.textBox_Click);
    textboxes[i, j].Tag = new GridIndex() { ipos = i, jpos = j };
  }

然后是您的处理程序:

    private void textBox_Click(object sender, EventArgs e)
    {
        TextBox textBox = sender as TextBox;

        if (textBox != null)
        {
            //Here your have the text of the clicked textbox
            string text = textBox.Text;
            //And here the X and Y position of the clicked textbox
            int ipos = (textBox.Tag as GridIndex).ipos;
            int jpos = (textBox.Tag as GridIndex).jpos;   
        }
    }

编辑:我对代码进行了一些更改,请审核。


3

您的EventHandler有一个名为sender的对象作为参数。您需要将其转换为TextBox,然后就可以获取文本框的文本。


2

您可以通过编写以下代码来获取文本框的值:

TextBox txt= (TextBox)sender; string text = txt.Text.ToString(); MessageBox.show(text);

希望对你有所帮助。


2
您的事件处理程序的签名为:
void Handler(object sender, EventArgs args)

当 sender 是指被点击的 TextBox 时,如果您还需要在此时知道 i * j,我创建了一个从 TextBox 派生的类,在其中存储了这些数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接