无法从另一种形式设置combobox selectedindex

时间:2012-05-16 14:59:58

标签: c# winforms combobox selectedindex

我试图根据第一个表单(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;
}

3 个答案:

答案 0 :(得分:2)

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

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

希望有所帮助。

答案 1 :(得分:1)

最佳做法是通常在表单的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)

答案 2 :(得分:0)

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。这样可以更容易地从组合框中正确选择值,而不仅仅是更改文本(不小心将其保留为空)。