索引更改事件 C#
本文关键字:事件 索引 | 更新日期: 2023-09-27 18:37:25
我只是想知道是否有任何东西可以执行第一次迭代的索引更改事件。
我的代码如下所示。
private void cboxEvent_IndexChange(object sender, EventArgs e)
{
int value;
value = cboxEvent.SelectedIndex;
resetListBoxes();
cboxEvent.SelectedIndex = value;
csvExport();
}
private void cboxSLA_IndexChange(object sender, EventArgs e)
{
int value;
value = cboxSLA.SelectedIndex;
resetListBoxes();
cboxNPA.SelectedIndex = value;
csvExport();
}
private void cboxNPA_IndexChange(object sender, EventArgs e)
{
int value;
value = cboxNPA.SelectedIndex;
resetListBoxes();
cboxNPA.SelectedIndex = value;
csvExport();
}
问题是,一旦索引更改,它就会重置其他列表框,并且它们的索引更改方法也会被激活。因此,它执行他们的索引更改方法。
我希望代码只为第一个索引更改执行一次。
有什么想法吗?
提前致谢
克里斯
你可以用这种方式重写你的 IndexChanged 处理程序(对所有处理程序都一样):
private bool _IgnoreIndexChange;
private void cboxEvent_IndexChange(object sender, EventArgs e)
{
if (_IgnoreIndexChange)
return;
_IgnoreIndexChange = true;
try
{
int value;
value = cboxEvent.SelectedIndex;
resetListBoxes();
cboxEvent.SelectedIndex = value;
csvExport();
}
finally
{
_IgnoreIndexChange = false;
}
}
因此,如果用户更改了任何索引 - 只有该组合框的 IndexChanged 处理程序会运行,而不会运行其他索引。
保留一个布尔变量来检查 IndexChanged 事件是从用户还是从另一个事件处理程序触发的,并且仅当 IndexChanged 事件从用户触发时才继续。
您可以使用
.要操作
的焦点属性这个想法是关闭焦点以禁用第二次迭代。
您需要一个标签作为焦点切换器
将 1 声明为全局变量;
Label x;
会是这样的
private void cboxEvent_IndexChange(object sender, EventArgs e)
{
if(cboxEvent.Focused)
{
int value;
value = cboxEvent.SelectedIndex;
resetListBoxes();
csvExport();
x.Focus();
}
if(!cboxEvent.Focused)
cboxEvent.SelectedIndex = value;
}
并且与另外 2 个组合框相同。