索引更改事件 C#

Index change event C#

我只是想知道是否有为第一次迭代执行索引更改事件。

我的代码如下所示。

    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(); 

    }

问题是,一旦索引发生变化,它就会重置其他列表框,并且它们的索引更改方法也会被激活。因此它执行 Their IndexChange 方法。

我希望代码在第一个索引更改时只执行一次。

有什么想法吗?

提前致谢

克里斯

保留一个布尔变量来检查索引更改事件是从用户触发还是从另一个事件处理程序触发,并且仅当索引更改事件从用户触发时才继续进行。

你可以使用.Focused 属性来操纵
这个想法是关闭焦点以禁用第二次迭代。

您需要一个标签作为 焦点切换器

声明一个为全局变量;

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 个组合框也是如此..

您可以用这种方式重写您的 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 处理程序会 运行,其他不会。