Spo*_*010 5 c# events textbox winforms
使用c#winforms vs2008
我在表单上有一个文本框,其中一个方法是从textBox1_Leave事件中调用的.该方法获取有问题的文本框的内容,并根据内容填充其他文本框.我的问题是,用户是否专注于文本框,然后单击按钮关闭表单(调用this.close),然后表单不会关闭,因为文本框离开事件被触发.如果文本框没有关注表单关闭,则表单关闭正常.
但是,如果用户通过单击顶角的小X关闭图标来关闭表单,则它会一直关闭,而不会触发文本框离开事件.
如何复制X关闭功能,以便我可以随时关闭表单而不会触发文本框离开事件?
最简单的解决方案是在进行后期处理之前检查实际聚焦的控件 - 但是您无法在Leave处理程序中执行此操作,因为此时焦点仍将位于文本框上.
相反,您需要将逻辑移动到LostFocus事件中,而不是设计器中的事件.你必须在运行时连接它:
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}
private void textBox1_LostFocus(object sender, EventArgs e)
{
if (closeButton.Focused)
return;
// Update the other text boxes here
}
}
Run Code Online (Sandbox Code Playgroud)
该LostFocus事件发生火灾后,新的控制接收焦点.
澄清 - 如果通过鼠标更改焦点,您可能会发现它通过将此逻辑置于Leave事件中而起作用.如果使用键盘,你将得到错误的行为. 在两种情况下都是可靠的- 集中控制将永远是"新"控制.这在MSDN上记录:Windows窗体中的事件顺序.LostFocus
顺便说一句,你没有遇到"红色X"这个问题的原因是X实际上不是一个可以获得焦点的控件,它是窗口的一部分.当用户单击它时,它不会导致文本框失去焦点,因此不会导致Leave事件触发.
| 归档时间: |
|
| 查看次数: |
19110 次 |
| 最近记录: |