【问题标题】:Set ComboBox default value without directly changing SelectedIndex设置 ComboBox 默认值而不直接更改 SelectedIndex
【发布时间】:2013-12-23 17:55:10
【问题描述】:

我有一个包含几个项目的 ComboBox。我想把 ComboBox 的SelectedIndex 放到0,所以当用户启动它时,第一项已经被选中(默认)。

但是,这样做 (combobox.SelectedIndex = 0;) 会干扰我的事件 combobox_SelectedIndexChanged(),当用户更改 ComboBox 的 SelectedIndex 并重新启动程序时会发生这种情况:

private void combobox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Process.Start(Application.ExecutablePath);
            this.Close();
        }

这将导致combobox_SelectedIndexChanged() 无限循环,因为combobox.SelectedIndex = 0; 将触发它,这将再次触发另一个,依此类推...

有没有办法让程序在用户更改 SelectedIndex 时执行某些操作而无需循环?

【问题讨论】:

    标签: c# winforms combobox selectedindexchanged


    【解决方案1】:

    删除事件处理程序(通过单击属性窗格顶部的闪电。然后清除 SelectedIndexChanged 处理程序)。

    在构造函数代码中,首先设置SelectedValue,然后添加事件处理程序。 这里:

    public Form1()
    {
        InitializeComponent();
    
        comboBox1.SelectedIndex = 0;
        comboBox1.SelectedIndexChanged += combobox_SelectedIndexChanged;
    }
    
    private void combobox_SelectedIndexChanged(object sender, EventArgs e)
    {
        Process.Start(Application.ExecutablePath);
        this.Close();
    }
    

    【讨论】:

    • 这奇怪地触发了Sytem.ObjectDisposedExecution
    • 这是另一个问题。
    【解决方案2】:

    你可以添加一个属性来抑制事件执行

    internal bool SupressSelectIndexChanged {get; set;}
    
    private void SomeCallingMethod(){
       this.SupressSelectIndexChanged = true;
       combobox.SelectedIndex = 0;
       this.SupressSelectionIndexChanged = false;
    }
    
    private void combobox_SelectIndexChanged(object sender, EventArgs e){
        if(this.SupressSelectIndexChanged){ return; }
    
        // - execution logic
    }
    

    【讨论】:

    • 什么SomeCallingMethod()?您可以直接更改属性。
    • @lomed SomeCallingMethod() 只是该属性如何使用的一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2018-12-26
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多