索引更改事件 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(); 
    }

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

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

有什么想法吗?

提前致谢

克里斯

索引更改事件 C#

你可以用这种方式重写你的 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 个组合框相同。