【问题标题】:Click Event for multiple Textboxes多个文本框的单击事件
【发布时间】:2025-12-17 08:00:01
【问题描述】:

所以我需要一种方法,当一个人点击一个 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);

            }
        }

然后,只要单击其中一个框,我就可以处理。如果您有更好的方法,我很想听听。我只是不知道如何访问被点击的框,主要是文本。希望我已经很好地解释了这一点。感谢大家的帮助!

-刘易斯

【问题讨论】:

    标签: c# winforms text textbox


    【解决方案1】:

    你的方法很好。你只需要定义一些额外的信息在事件中进行处理,如下:

    我们可以定义一个类来存储文本框的位置:

    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;   
            }
        }
    

    编辑:我对代码做了一些更改,请检查。

    【讨论】:

      【解决方案2】:

      您的 EventHandler 有一个名为 sender 的对象作为参数。你必须把它转换成一个TextBox,然后你才能得到文本框的文本。

      【讨论】:

        【解决方案3】:

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

        void Handler(object sender, EventArgs args)
        

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

        【讨论】:

          【解决方案4】:

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

          TextBox txt= (TextBox)sender; 字符串文本 = txt.Text.ToString(); MessageBox.show(文本);

          希望对你有帮助

          【讨论】:

            最近更新 更多