Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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# - Fatal编程技术网

C# 单击按钮即可从窗体上的多个文本框中清除文本框

C# 单击按钮即可从窗体上的多个文本框中清除文本框,c#,C#,不确定如何从表单上的多个文本框中选择一个文本框,并在按钮的单击事件中清除它。例如,如果一个计算器有多个操作数字段,并且需要实现“清除当前字段”按钮,我该如何实现它?这是我到目前为止的代码片段 private void button2_Click(object sender, EventArgs e) { foreach (Control t in this.Controls) { if (t is TextBox) { if (t

不确定如何从表单上的多个文本框中选择一个文本框,并在按钮的单击事件中清除它。例如,如果一个计算器有多个操作数字段,并且需要实现“清除当前字段”按钮,我该如何实现它?这是我到目前为止的代码片段

private void button2_Click(object sender, EventArgs e) 
{ 
   foreach (Control t in this.Controls) 
   { 
      if (t is TextBox) 
      { 
         if (t.Focused) 
         { 
            t.Text = ""; 
         } 
      } 
   } 
}

正如Hari Prasad提到的,一旦用户点击按钮,活动文本框就会失去焦点。因此,我建议使用
Leave
事件和一个实例来检测在单击按钮之前哪个文本框处于活动状态

private TextBox _tmpTextbox;

private void txt1_Leave(object sender, EventArgs e)
{
   _tmpTextbox = txt1;
}

private void txt2_Leave(object sender, EventArgs e)
{
  _tmpTextbox = txt2;
}
对于按钮:

private void btnTest_Click(object sender, EventArgs e)
{
  _tmpTextbox.Text = "";
}
为了缩短代码,您可以对所有文本框使用一个偶数处理程序:

private void txt1_Leave(object sender, EventArgs e)
{
  TextBox activeTextBox = (TextBox) sender;
  _tmpTextbox = activeTextBox;
}

一个选项可以是订阅
TextBox
LostFocus
事件

声明一个类字段以保存活动
TextBox
的引用

私有文本框activeTextbox

表单中加载
事件订阅
文本框
LostFocus
事件

textbox1.LostFocus += (se,ev) => activeTextbox = textbox1;
textbox2.LostFocus += (se,ev) => activeTextbox = textbox2;
现在在按钮
中单击
事件

private void button2_Click(object sender, EventArgs e) 
{
     if(activeTextbox != null)
     {
          activeTextbox.Text = "";    
     }

}

当点击按钮时,焦点将移出
TextBox
,因此此代码将不起作用,您必须通过
name
tag
找到控件,这实际上是一个非常简单的程序。只需在表单和按钮上放置两个文本框。现在,点击一个按钮,试着抓住激活的文本框。如果我事先知道我想要哪一个,那就容易了。“如果我不知道,不确定该捕捉哪个事件,鼠标离开,聚焦,或者其他什么。”哈里普拉萨德,如果我知道这个名字,那就很容易了。问题是,我不知道哪一个是活动的,这意味着在离开它并单击按钮之前,我有焦点或哪一个是活动的。不确定标记是如何工作的。@AlexJolig表示歉意,在主帖子中添加了代码。如果这是您要查找的内容,请在按钮单击事件中\u tmpTextbox为空:(@SaurabhGupta你确定你在一个文本框获得焦点后点击了按钮吗?我修改了代码,它工作正常。是的,我就是这么做的:(不确定此解决方案的问题是什么。谢谢您的帮助!太好了,我很高兴它起到了帮助作用。最好使用
GotFocus
enter
事件,而不是
GotFocus
事件。因为当按钮是表单的
acceptButton
时,用户可以通过按enter按钮来单击并触发click事件,即使没有她的文本框处于活动状态。