我的程序里一个ShowDialog() 偶尔会执行两次。不知道什么原因。

时间:2020-12-21 18:52:18
代码比较多,我简化一下。


首先使用了C1TrueDBGrid这个控件。

你要实现的功能是,在C1TrueDBGrid的单元格输入产品编码,按回车出来选择产品的模式窗口。选择数据后返回结果。

现在的问题是这个模式窗口有的时候打开两次,测试了好久,没有固定的条件。就是偶尔会出现。

事件委托是自己在代码里写的。
 


 this.AfterColEdit -= new C1.Win.C1TrueDBGrid.ColEventHandler(NewDataGrid_AfterColEdit); this.AfterColEdit += new C1.Win.C1TrueDBGrid.ColEventHandler(NewDataGrid_AfterColEdit);
void NewDataGrid_AfterColEdit(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e) {
From pop = new From();
  if (pop.ShowDialog() == DialogResult.OK)     {
/
}

}

8 个解决方案

#1


可能是你引用第三方控件的问题,我也遇到过!

#2


我也遇到过模式窗口出现多次的情况,那是因为for循环里面嵌套了if...else语句,改正方法是在循环for外设一个boolean参数,另外在再用一个if语句

#3


引用 2 楼 zjc378933260 的回复:
我也遇到过模式窗口出现多次的情况,那是因为for循环里面嵌套了if...else语句,改正方法是在循环for外设一个boolean参数,另外在再用一个if语句


先用你的办法试试,看还会不会出现。
我开始是怀疑NewDataGrid_AfterColEdit被调用了多次,

#4


NewDataGrid_AfterColEdit

被多次触发导致

#5


引用 4 楼 sandy945 的回复:
NewDataGrid_AfterColEdit

被多次触发导致


要怎么避免中呢?

#6


能解释一下吗。有朋友告诉我是用"+="委托事件引起多次触发,可我不理解。

#7


可能性有多个,这里条件不足,无法判断。
可能是:
一、事件执行中又无意中触发了事件本身,解决方法是事件执行代码中(-=)将事件先屏蔽,执行后(+=)重新启用。
二、事件源头可能会触发多次,解决方法是,配合其它事件来组合触发条件,或者直接更换事件。

#8


按回车出来选择产品的模式窗口
------------------------
解决问题的办法还得从源头找

你得控制只在按回车的时候 才触发相关事件

#1


可能是你引用第三方控件的问题,我也遇到过!

#2


我也遇到过模式窗口出现多次的情况,那是因为for循环里面嵌套了if...else语句,改正方法是在循环for外设一个boolean参数,另外在再用一个if语句

#3


引用 2 楼 zjc378933260 的回复:
我也遇到过模式窗口出现多次的情况,那是因为for循环里面嵌套了if...else语句,改正方法是在循环for外设一个boolean参数,另外在再用一个if语句


先用你的办法试试,看还会不会出现。
我开始是怀疑NewDataGrid_AfterColEdit被调用了多次,

#4


NewDataGrid_AfterColEdit

被多次触发导致

#5


引用 4 楼 sandy945 的回复:
NewDataGrid_AfterColEdit

被多次触发导致


要怎么避免中呢?

#6


能解释一下吗。有朋友告诉我是用"+="委托事件引起多次触发,可我不理解。

#7


可能性有多个,这里条件不足,无法判断。
可能是:
一、事件执行中又无意中触发了事件本身,解决方法是事件执行代码中(-=)将事件先屏蔽,执行后(+=)重新启用。
二、事件源头可能会触发多次,解决方法是,配合其它事件来组合触发条件,或者直接更换事件。

#8


按回车出来选择产品的模式窗口
------------------------
解决问题的办法还得从源头找

你得控制只在按回车的时候 才触发相关事件