C# 设置从其他窗体选择的索引组合框时出现问题

C# 设置从其他窗体选择的索引组合框时出现问题,c#,winforms,combobox,selectedindex,C#,Winforms,Combobox,Selectedindex,我试图根据用户在第一个表单(form1)上选择的索引,在另一个表单(form2)上设置selectedindex 我用这段代码获取值,但它返回一个负数 public int SelectedComboIndex { get { return comboBox1.SelectedIndex; } } 我正在尝试设置组合框索引 comboBox1.SelectedIndex = form1.SelectedComboIndex; 有人能给我指出正确的方向吗 编辑:在form1上调用代码的位

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

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

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


希望有帮助。

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

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


希望能有所帮助。

注意:您应该将所有组件重命名为比controlType1、controlType2等更有用的组件。这对您和我们都有好处。

正如其他人所说,如果
form1.selectedComboxIndex
返回-1(因为
form1.Combox1
未选择任何内容),则行
Combox1.SelectedIndex=form1.selectedComboxIndex
将(正确地)将
Combox1
的值设置为空

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


如果您希望用户能够键入,则考虑将< <代码> AutoCompleteMode < /代码>设置为<代码> SuggestAppend < /代码>和<代码>自动完成资源> <代码> > <代码> ListTimes 。这使得从组合框中正确选择值更容易,而不仅仅是更改文本(意外地将其保留为空)。

注意:您应该将所有组件重命名为比controlType1、controlType2等更有用的名称。这对您和我们都有好处。

正如其他人所说,如果
form1.selectedComboxIndex
返回-1(因为
form1.Combox1
未选择任何内容),则行
Combox1.SelectedIndex=form1.selectedComboxIndex
将(正确地)将
Combox1
的值设置为空

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


如果您希望用户能够键入,则考虑将< <代码> AutoCompleteMode < /代码>设置为<代码> SuggestAppend < /代码>和<代码>自动完成资源> <代码> > <代码> ListTimes 。这使得从组合框中正确选择值更容易,而不仅仅是更改文本(意外地将其保留为空)。

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

试试看它是否有效。只需确保将加载处理程序正确地添加到表单中(通过设计器或通过
this.Load+=neweventhandler(Form2\u-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; 
}

试试看它是否有效。只需确保将加载处理程序正确地添加到表单中(通过设计器或通过
this.Load+=neweventhandler(Form2\u Load)在代码中)

A
SelectedIndex
-1
表示未选择任何内容,您确定选择了什么吗?对于
组合框1,默认值为
-1
。SelectedIndex
这正是我得到的负数。我确定我选择了它,但只是试图将选择的内容传递到另一个组合框B表单2上的ox将表单1和表单2的代码张贴在上面,您在其中设置属性SelectedComboIndex以及使用它的位置。我将添加更多内容。您可以显示调用此代码的方法:comboBox1.SelectedIndex=form1.SelectedComboIndex;?如果
-1
的值为
SelectedIndex
,则表示未选择任何内容您确定选择了什么?对于
Combox1,默认值为
-1
。SelectedIndex
这正是我得到的负数。我确定我选择了它,但只是尝试将选择转移到form2上的另一个组合框。在form1和form2上,您的代码将设置属性SelectedComboIndex a你可以展示调用此代码的方法:comboBox1.SelectedIndex=form1.SelectedComboIndex;?这只是重申了我上面提到的内容,并不是一个真正的答案,只是ComboBox的工作原理。这只是重申了我上面提到的内容,不是一个真正的答案,只是ComboBox的工作方式因此我得到的感觉是这行代码comboBox1.SelectedIndex=form1.SelectedComboxIndex;因此我得到的感觉是这行代码Combox1.SelectedIndex=form1.SelectedComboxIndex;