不确定如何从表单上的多个文本框中选择文本框,并在按钮的单击事件上清除它。例如,如果我们有一个计算器的多个操作数字段并需要实现清除当前字段按钮,我该如何实现它?这是我到目前为止的代码片段。
private void button2_Click(object sender, EventArgs e)
{
foreach (Control t in this.Controls)
{
if (t is TextBox)
{
if (t.Focused)
{
t.Text = "";
}
}
}
}
答案 0 :(得分:2)
一个选项可能是订阅TextBox
LostFocus
个事件。
声明一个类字段以保存活动TextBox
的引用。
私人TextBox activeTextbox;
在Form_Load
事件中订阅TextBox
LostFocus
事件。
textbox1.LostFocus += (se,ev) => activeTextbox = textbox1;
textbox2.LostFocus += (se,ev) => activeTextbox = textbox2;
现在在按钮click
事件
private void button2_Click(object sender, EventArgs e)
{
if(activeTextbox != null)
{
activeTextbox.Text = "";
}
}
答案 1 :(得分:0)
正如Hari Prasad所说,只要用户点击按钮,活动的TextBox就会失去焦点。所以我建议使用Leave
事件和一个实例来检测单击按钮之前哪个TextBox处于活动状态。
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;
}