【问题标题】:Trouble setting combobox selectedindex from another form从另一个表单设置组合框 selectedindex 时遇到问题
【发布时间】:2012-05-16 14:59:58
【问题描述】:

我正在尝试根据用户在第一个表单 (form1) 上选择的索引在另一个表单 (form2) 上设置 selectedindex。

我正在使用此代码获取值,但它返回一个负数。

public int SelectedComboIndex
{
   get { return comboBox1.SelectedIndex; }
}

我正在尝试设置组合框索引

comboBox1.SelectedIndex = form1.SelectedComboIndex;

任何人都可以指出正确的方向吗?

编辑:更多代码用于调用 form1 上的代码

Form1 form1 = null;
public Form2(Form1 parentForm1) : this()
{
    form1 = parentForm1;
}

【问题讨论】:

  • SelectedIndex 值为-1 表示未选择任何内容,您确定选择了某些内容吗? combBox1.SelectedIndex 的默认值为 -1
  • 这正是我得到的负数。我确定我选择了它,但只是试图将选择转移到 form2 上的另一个组合框
  • 发布您的 form1 和 form2 代码,您在其中设置属性 SelectedComboIndex 以及您使用它的位置
  • 上面贴过。生病添加更多
  • 你能显示调用此代码的方法吗:comboBox1.SelectedIndex = form1.SelectedComboIndex; ?

标签: c# winforms combobox selectedindex


【解决方案1】:

如果没有选择索引,组合框会返回负值(通常为 -1)。

所以我相信(我没有检查过)如果您为 SelectedIndex 属性设置负值,您要做的就是清除组合框中的选择。

希望对您有所帮助。

【讨论】:

  • 这只是重申了我上面已经提到的内容,它并不是真正的答案,只是 ComboBox 的工作原理
【解决方案2】:

最佳实践通常是在表单的 Load 方法中保留任何类型的 UI 更改,这样表单就有机会正确初始化,并且在您实际进行更改之前设置所有绑定。构造函数只能用于设置内部状态。

private Form1 _parentForm;
public Form2(Form1 parentForm) : this()
{
    _parentForm = parentForm;
}

public Form2()
{
    InitializeComponents();
}

private void Form2_Load(object sender, EventArgs e)
{
    richTextBox1.Font = new Font("Times New Roman", 12f, FontStyle.Regular); 
    dropdown(); 
    if(_parentForm != null)
        comboBox1.SelectedIndex = _parentForm.SelectedComboIndex; 
    comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; 
}

尝试一下,看看它是否有效。只需确保将 Load 处理程序正确添加到表单中(通过设计器或通过 this.Load += new EventHandler(Form2_Load) 的代码)

【讨论】:

    【解决方案3】:

    Note: You should rename all your components to something more useful than controlType1, controlType2 etc. This is good for both you and us.

    正如其他人所说,如果 form1.SelectedComboIndex 返回 -1(因为 form1.comboBox1 没有选择任何内容),那么 comboBox1.SelectedIndex = form1.SelectedComboIndex 行将(正确地)将 comboBox1 的值设置为空。

    此外,仅仅因为您的ComboBox 中存在文本并不意味着它具有选定的值。确保您的组合框实际选择了一个值(而不仅仅是更改了它的文本)。您可以通过将DropDownStyle 设置为DropDownList 来强制选择一个值。其他两种样式都允许用户输入自定义值。

    如果您希望用户能够打字,请考虑将AutoCompleteMode 设置为SuggestAppend 并将AutoCompleteSource 设置为ListItems。这样可以更轻松地从组合框中正确选择值,而不仅仅是更改文本(不小心将其留空)。

    【讨论】:

    • 所以我得到的感觉是这行代码comboBox1.SelectedIndex = form1.SelectedComboIndex;
    猜你喜欢
    • 2019-07-24
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多