如何在以编程方式与控件交互后阻止事件触发?

时间:2016-05-29 17:02:47

标签: c# user-interface events event-handling controls

我有一个CheckedBoxList。此外,我附加了ItemCheck事件,因此在检查项目后执行功能。但问题是,在我的程序中,我需要以编程方式检查/取消选中项目。此操作会触发事件功能。

我的猜测也适用于其他控件。

我该如何防止这种行为?我需要只在用户与之交互时运行函数,而不是在我在应用程序内部进行控制时才运行。

3 个答案:

答案 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方法。