单击“多个文本框的事件”

时间:2010-11-18 09:32:54

标签: c# winforms text textbox

所以我需要一种方法,当一个人点击8x8文本框网格中的文本框时,他们点击的文本框中的文本会更改为某些内容。我的网格设置在名为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 个答案:

答案 0 :(得分: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;   
        }
    }

修改:我对代码进行了一些更改,请查看。

答案 1 :(得分:3)

您的EventHandler有一个名为sender的对象作为参数。您必须将其强制转换为TextBox,然后才能获得文本框的文本。

答案 2 :(得分:2)

您的事件处理程序具有签名:

void Handler(object sender, EventArgs args)

其中sender是对单击的TextBox的引用。如果此时你还需要知道i * j,我创建了一个派生自TextBox的类,其中包含了那些数字。

答案 3 :(得分:2)

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

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

希望这对你来说是完全有用的