从另一个窗体设置组合框选定索引时出错

本文关键字:索引 出错 另一个 窗体 设置 组合 | 更新日期: 2023-09-27 18:34:17

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

我用这段代码获取值,但它返回一个负数。

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

我正在尝试通过以下方式设置组合框索引

comboBox1.SelectedIndex = form1.SelectedComboIndex;

谁能指出我如何做到这一点的正确方向?

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

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

从另一个窗体设置组合框选定索引时出错

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

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

希望有帮助。

最佳做法是通常在窗体的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) 在代码中

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设置为 SuggestAppendAutoCompleteSource设置为 ListItems 。 这样可以更轻松地从组合框中正确选择值,而不仅仅是更改文本(意外将其保留为空)。