Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中选中1个复选框时,如何通过单击清空所有文本框#_C#_Visual Studio 2008 - Fatal编程技术网

C# 在C中选中1个复选框时,如何通过单击清空所有文本框#

C# 在C中选中1个复选框时,如何通过单击清空所有文本框#,c#,visual-studio-2008,C#,Visual Studio 2008,在我的应用程序中,我有85个文本框。我的应用程序中的所有文本框如下所示: void textBox1s(string input) { this.textBox1.ForeColor = Color.Black; this.textBox1.Text = input; } private void textBox1_MouseClick(object sender, MouseEventArgs e) { textBox1s(Clipboard.GetText());

在我的应用程序中,我有85个文本框。我的应用程序中的所有文本框如下所示:

void textBox1s(string input)
{
    this.textBox1.ForeColor = Color.Black;
    this.textBox1.Text = input;
}

private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
    textBox1s(Clipboard.GetText());
}
现在我想要任何文本框,当通过单击/鼠标选中复选框时单击textbox1>>>仅空textbox1.text 如果单击textbox2>>>仅空textbox2.text 及

在我的应用程序中,我有tabControl1和18 groupbox

当通过单击/鼠标单击文本框复选框为空时,如何设置所有文本框

如果我的答案是使用用户控制,请给我一个示例代码


谢谢。

据我所知,您需要一个复选框作为切换-选中时,删除文本框的内容,取消选中时,将剪贴板复制到其中

这方面的准则是:

void textBox_MouseClick(object sender, MouseEventArgs e)
{
    textBox tb = (TextBox)sender;
    if (checkBox1.IsChecked)
    {
        tb.Text = "";
    }
    else
    {
        tb.Text = Clipboard.GetText();
    }
}

然后,您可以让文本框上的所有Click()事件指向此方法-代码重用万岁:D

要重置文本,下面这部分代码将重置任何单击的文本框:

首先声明事件委托

 private void AllTextBoxes_MouseClick(object sender, MouseEventArgs e)
        {
            if(sender is TextBox)
                ((TextBox)(sender)).Text = "";
        }
除了将其分配给每个文本框之外,您还可以使用VisualStudio属性框来完成此操作,方法是选择所有文本框并将其分配给每个文本框,或者手动为每个文本框分配:

this.textBox2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.AllTextBoxes_MouseClick);
或者在FormLoad_事件中,您可以执行此操作

 foreach (Control ctrl in this.Controls)
            {
                if (ctrl is TextBox)
                {
                    ctrl.MouseClick += new System.Windows.Forms.MouseEventHandler(this.AllTextBoxes_MouseClick);
                }
            }
您可以在GroupBox中重置文本框文本,如下所示

foreach (Control ctrl in groupBox1.Controls)
            {
                if (ctrl is TextBox)
                {
                    MessageBox.Show(ctrl.Name);
                }
            }
对于所有GroupBox,您可以:

foreach (Control control in this.Controls)

    {
        if(control is GroupBox)
        {
        foreach (Control ctrl in groupBox1.Controls)
                    {
                        if (ctrl is TextBox)
                        {
                            MessageBox.Show(ctrl.Name);
                        }
                    }
        }
    {

不太清楚你的意思,但如果你想遍历文本框集合,你可以这样做:

    foreach (Control cntrl in this.Controls)
    {
        if (cntrl is TextBox)
        {
            cntrl.Text = "lold";
        }
    }

其中“this”是类似容器的表单

Neurtix走上了正确的轨道,但它不会捕获子容器中的文本框,也不会处理调用正确函数来设置正确文本框的属性。在没有用户控件的情况下处理它的最佳方法是使用递归函数来分配事件处理程序

public void SetTextBoxClickHandler(Control control)
{
    foreach (Control childControl in control.Controls)
    {
        if (childControl is TextBox)
        {
            childControl.Click += this.MyClickHandler;
            continue;
        }
        if (item.Controls == null)
            continue;
        SetTextBoxClickHandler(childControl);
    }
}

private void MyClickHandler(object sender, MouseEventArgs e)
{
    typeof(Form).InvokeMember(string.Format("{0}s", ((Control)sender).Name), BindingFlags.InvokeMethod | BindingFlags.NonPublic, null, null, new object[] { Clipboard.GetText() });
}

private void Form1_Load(object sender, EventArgs e)
{
    SetTextBoxClickHandler(this.Controls);
}
如果您使用一个用户控件,这非常简单,只需从TextBox继承,并将所有内容设置为使用新控件

public class ClickableTextBox : TextBox
{
    public ClickableTextBox()
    {
        this.Click += MyClickHandler;
    }
    void setText(string input)
    {
        this.ForeColor = Color.Black;
        this.Text = input;
    }

    private void MyClickHandler(object sender, MouseEventArgs e)
    {
        setText(Clipboard.GetText());
    }
}
出于以下原因,我建议创建客户用户控件:

  • 避免使用反射根据方法名称动态调用方法的性能损失
  • 避免每次单击时将对象发送器转换为控件的性能损失
  • 在检查表单上的每个控件和子控件的初始化循环期间,无论它是否是文本框,都要避免性能受到影响
  • 要维护的代码更少
  • 更高的可重用性,即表单代码,必须出现在每个表单上,如果您需要在不同的项目或不同的表单上重用它,那么重用自定义用户控件比将代码复制/粘贴到可能需要更改的每个表单要容易得多
  • 当然,如果您只需要设置文本,而不需要在该函数中设置其他内容,您可以将其简化一点

    public void SetTextBoxClickHandler(Control control)
    {
        foreach (Control childControl in control.Controls)
        {
            if (childControl is TextBox)
            {
                childControl.Click += this.MyClickHandler;
                continue;
            }
            if (item.Controls == null)
                continue;
            SetTextBoxClickHandler(childControl);
        }
    }
    
    private void MyClickHandler(object sender, MouseEventArgs e)
    {
        TextBox textBox = sender as Textbox;
        if (textBox == null)
            return;
        textBox.ForeColor = Color.Black;
        textBox.Text = Clipboard.GetText();
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
        SetTextBoxClickHandler(this.Controls);
    }
    
    或使用用户控件:

    public class ClickableTextBox : TextBox
    {
        public ClickableTextBox()
        {
            this.Click += MyClickHandler;
        }
    
        private void MyClickHandler(object sender, MouseEventArgs e)
        {
            this.ForeColor = Color.Black;
            this.Text = input;
        }
    }
    

    出于上述许多原因,我仍然建议使用自定义用户控件。

    您的应用程序的示例屏幕截图将非常有用。您是否需要清除复选框选中/取消选中事件的文本框,或者只清除文本框单击事件只是一些建议如果您的应用程序有85个文本框,那么您可能做错了。@Ramhound我想他是在试图通过自身屏幕截图构建GridView:对于所有85个文本框,请使用此代码?85文本框。!我需要所有文本框的1个代码此代码对我不有用:-?不,您可以将所有文本框设置为使用这一段代码。转到正在处理的表单>单击文本框,查看左侧的属性窗口,转到事件选项卡,找到MouseClick()事件,并将字段中的文本替换为textbox\u MouseClick。是的,您必须对所有85个文本框执行此操作,但只需执行一次。要么就是这样,要么就是将上面的代码粘贴到所有当前事件处理程序中(我假设其中也有85个)。如果单击任何文本框剪贴板,则仅复制到tb。Text:)查看“tb”的来源-这是标准的EventHandler方法sender'是引发事件的对象-因此,如果textBox1调用它,它将是对textBox1的引用,如果textBox2调用它,它将是对textBox2的引用,等等。因此,我们可以简单地将sender放入一个TextBox(我称之为'tb'),以便从中提取文本。好,但我认为这段代码不适用于groupbox中的任何文本框。groupbox中至少有60个文本框:(@Mehrdad你为什么这么认为?哇,做得很好:)你能帮我怎么为所有gropbox设置它吗?谢谢