抱歉,这可能是一个重复的问题,但我无法理解已在不同答案中提供的解决方案。
我以不同的方式创建了一个mp3播放器,它一次播放一个mp3文件但是一个列表框有章节,这不仅处理移动该特定mp3的位置而且还改变了一个图片框图像。现在某个地方我需要从搜索栏更改列表框的选择,但不想触发以下事件; private void listBox1_SelectedIndexChanged(object sender,EventArgs e)
请指导。
答案 0 :(得分:1)
以正常方式禁止选择索引更改事件的一种方法是使用布尔标志。此外,当出现一些异常时,请确保这种抑制不会存在:
private bool inhibit = true;
private void doSomeProcessWithInhibit()
{
try
{
inhibit = true;
// processing comes here
}
// if something goes wrong, make sure other functionality is not blocked
finally
{
inhibit = false;
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// fast return to reduce nesting
if (inhibit)
return;
// do event handling stuff here
}
P.S。尝试为控件使用有意义的名称(选中listBox1
)。重新访问代码和/或others have to时,您会感谢自己。
答案 1 :(得分:0)
添加一个名为isProcessing的类范围的布尔值。将其设置为true。做你的工作,然后把它设置为假。在布尔值中扭曲您的事件:
bool isProcessing = true;
private void switchControls(){
isProcessing = true;
//do work;
isProcessing = false;
}
private void MyControl.OnEvent(object sender, EventArgs e){
if(!isProcessing){
//what you would normally do
}
}
... OR
取消注册该事件,重新注册
private void switchControls(){
myButton1.OnClick -= myButtonClick;
//do work
myButton1.OnClick += myButtonClick;
}