winform窗体取得焦点事件
winform窗体获得焦点事件在窗体A获得焦点时,判断窗体B的必须项,如果为空弹出msg,返回画面B代码如下public
winform窗体获得焦点事件
在窗体A获得焦点时,判断窗体B的必须项,如果为空弹出msg,返回画面B
代码如下
public Boolean bolActive = true;
private void formA_Activated(object sender, EventArgs e)
{
if (bolActive)
{
if (string.IsNullOrEmpty(formB.txt1.Text))
{
bolActive = false;
MessageBox.Show("123");
frmB.BringToFront();
}
}
}
问题是如果鼠标点击窗体A的标题栏,formA_Activated事件会运行两次,弹出两次msg,而点击窗体A的客户区就没问题,求教为什么?有什么好的解决办法?
[解决办法]先把public Boolean bolActive = false; 设置为false,然后根据如下代码:
foreach (DockContent form in formsDockPanel.Contents)
{
if (form is formB)
{
form.Activate();
bolActive = true;
return;
}
}
将public Boolean bolActive = true;设置为true;
formsDockPanel这个是个容器Panel,不用解释了吧!
再试试看看。
[解决办法]
如果真是这样,你注销和再次注册formA_Activated事件,来弥补这个缺陷。
或者你把代码部分部分的注释掉,一步一步的再调试,看看是那部分的代码出了问题。
[解决办法]
你直接让B窗体的必填项都填完之后再返回A不就好了吗?
[解决办法]
你这个事件是每当窗体被激活是发生的,你连续点当然一直激活会一直弹出你下面的mesg,你加载窗体一次点击text又一次不就两次了···
[解决办法]
意思是窗体加载就已经激活窗体,就已经执行了一次
private void formA_Activated(object sender, EventArgs e)
{
if (bolActive)
{
if (string.IsNullOrEmpty(formB.txt1.Text))
{
bolActive = false;
MessageBox.Show("123");
formB.BringToFront();
bolActive = true;
}
}
因为你这个判断string.IsNullOrEmpty(formB.txt1.Text)是成立的,而你再点一次当然又在激活了,你自己判断都这样判断,你要改改这个 if (string.IsNullOrEmpty(formB.txt1.Text))判断就可以解决你的问题了吧,不知道这样说行不?
[解决办法]试试Form的Enter事件