我的所有文本框都有一个事件。 (VC#Windows表单应用程序)

时间:2015-09-25 14:26:28

标签: c# .net winforms

我在这个网站上搜索了很多,发现了类似的问题,但没有一个答案可以帮助我。所以我要问问自己。我有这个代码,当我想把所有的文本框放到同一个事件时,它不起作用,这里是:

private void OnMouseUp(object sender, MouseEventArgs e)
{
  TextBox textBox = (TextBox)sender;
  textBox.SelectionLength = 0;
}

我通过查看本网站上其他类似问题的答案来制作此代码。 我也通过结合我在这个网站上找到的答案来制作这个:

private void OnMouseUp(object sender, MouseEventArgs e)
{
  foreach (Control x in this.Controls)
  {
    if (x is TextBox)
     {
      ((TextBox)x).SelectionLength = 0;
     }
  }
}

哪个也不起作用...... 有人可以告诉我将相同的事件发送到所有文本框的最简单方法吗?

4 个答案:

答案 0 :(得分:3)

在表单类中添加textbox1.OnMouseUp+= OnMouseUp

答案 1 :(得分:1)

假设您希望表单上的每个 Textbox都有此事件:

private void AssignEvent(Control.ControlCollection controls)
{   
    foreach (Control c in controls)
    {
        if (c is Textbox)
            c.MouseUp += OnMouseUp;

        if (c.HasChildren)
            AssignEvent(c.Controls);
    }
}

在您的Form_Load中调用此方式:

AssignEvent(this.Controls);

此方法只是遍历表单上的每个控件,并且每个子控件(即Form都有GroupboxGroupboxTextbox)。如果它是Textbox,则会分配该事件。如果不是,它只会转到下一个。

答案 2 :(得分:0)

我通过这样做来修复它:

private void Form1_Load(object sender, EventArgs e)
    {
        foreach (Control x in this.Controls)
        {
            if (x is TextBox)
            {
                ((TextBox)x).MouseUp += SLMethod;
            }
        }
    }

    static void SLMethod(object sender, MouseEventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        textBox.SelectionLength = 0;
    }

这段代码的作用是让我无法使用鼠标在我的框中选择代码。这就是我想要的。 我真的不明白你的答案,但谢谢你!

答案 3 :(得分:0)

编辑:如果你想使用标准的.Net方式使你的文本框“不可选”:

foreach (Control x in this.Controls)
    {
        if (x is TextBox)
        {
            ((TextBox)x).Enabled = false;
        }
    }

如果只是让鼠标无法选择它们,请将控件附加到您的活动中。