winforms C#组合框选定,索引= -1不工作

y53ybaqx  于 2023-05-07  发布在  C#
关注(0)|答案(2)|浏览(181)

它应该重置组合框为无值,组合框在同一面板中,但代码将索引设置为0,这是数据绑定列表的第一个值。它的工作在第二次点击虽然...第一次单击时,它将索引设置为0,第二次单击时设置为-1。

if (((Button)sender).Parent.Controls.OfType<ComboBox>().Count() > 0)
        {
           foreach(ComboBox C in ((Button)sender).Parent.Controls.OfType<ComboBox>().ToList())
            {
                if(C.SelectedIndex != -1)
                {
                    C.SelectedIndex = -1;
                }
            }
        }
i7uq4tfw

i7uq4tfw1#

也许您可以尝试在ComboBox中添加一个虚拟的第一项作为占位符。
这样,您可以简单地使用ComboBox.SelectedIndex = 0;取消选择
只是要确保不要将ComboBox中的这个项目解释为任何地方的真实的项目。
另外,试试:

ComboBox.ResetText();
ComboBox.SelectedIndex = -1;

或者:

ComboBox.SelectedItem = null;
9q78igpj

9q78igpj2#

谢谢大家的回答...最后我用一个变通方案解决了这个问题。问题是,上面代码的按钮需要点击两次才能将index设置为-1。在第一次点击时,它移动到0,第二次移动到-1。我不知道为什么tho...另一个问题是我在combobox上有一个索引更改事件,我只想激发它一次-而不是两次。我是这样解决问题的。。

if (((Button)sender).Parent.Controls.OfType<ComboBox>().Count() > 0)
        {
           foreach(ComboBox C in ((Button)sender).Parent.Controls.OfType<ComboBox>().ToList())
            {
                if(C.SelectedIndex != -1)
                {
                    C.SelectedIndexChanged -= this.ComboBox_Promo_SelectedIndexChanged;
                    while (C.SelectedIndex != -1)
                    {
                        C.SelectedIndex = -1;
                    }
                    C.SelectedIndexChanged += this.ComboBox_Promo_SelectedIndexChanged;
                    this.ComboBox_Promo_SelectedIndexChanged(C, EventArgs.Empty);
                }
            }
        }

相关问题