我有一个CheckedBoxList。此外,我附加了ItemCheck
事件,因此在检查项目后执行功能。但问题是,在我的程序中,我需要以编程方式检查/取消选中项目。此操作会触发事件功能。
我的猜测也适用于其他控件。
我该如何防止这种行为?我需要只在用户与之交互时运行函数,而不是在我在应用程序内部进行控制时才运行。
答案 0 :(得分:4)
使用标志
function ExampleObject(data){
if (typeof data === "object" && data.type === "ExampleObject") {
// construct from plain object
Object.assign(this, data);
} else {
// construct from normal data object
this.data = data;
this.type = "ExampleObject";
}
}
client.on('receiveObject', function (obj) {
if (obj.type) {
switch(obj.type) {
case "ExampleObject":
obj = new ExampleObject(obj);
break;
case "OtherObject":
obj = new OtherObject(obj);
break;
default:
console.error("Unsupported object type: ", obj.type);
break;
}
} else {
// just plain object
}
if (obj instanceof ExampleObject){
process.stdout.write("Received example object");
} else {
process.stdout.write("Received something unknown");
}
});
try / finally语句确保即使发生异常或者try代码块留有private bool _updating;
void CheckedBoxList_ItemCheck(sender object, EventArgs e)
{
if (_updating) return;
// Execute item check code
}
void SomewhereElse()
{
_updating = true;
try {
// programmatically check/uncheck items
} finally {
_updating = false;
}
}
(或循环内的return
),该标志也会被取消设置。
答案 1 :(得分:2)
您可以将所有更改包装到函数中的CheckedBoxList中,并且每次都使用该函数。代码可能如下所示:
HttpSession
答案 2 :(得分:0)
首先在表单级别创建布尔变量:
bool dontUpdate = false;
然后在Checklist Itemcheck方法中,仅当dontUpdate为false时才执行:
public void CheckedBoxList_ItemCheck(sender object, EventArgs e) {
if (dontUpdate) return;
//else execute
}
现在以编程方式检查项目时,将其设置为true:
void nativeUpdate(){
dontUpdate = true;
//Do your items check
dontUpdate = false;
}
每当您需要以编程方式检查item / S时,请使用nativeUpdate方法。