【问题标题】:C# WinForms Selecting ComboBox item in new formC# WinForms 在新表单中选择 ComboBox 项
【发布时间】:2013-12-23 11:35:43
【问题描述】:

我需要一点帮助。我有一个名为Form1 的主表单。 当我单击按钮btn1 时,会出现一个名为Form2 的新表单。 在Form2 中,我有几个文本框和一个名为cb2 的组合框。

对于TextBoxes,我是这样设置显示文本的:

//on Form1 I have this code
private void btn1_Click(object sender, EventArgs e)
{
    Form2 form2= new Form2();
    string a = "Text to be displayed in a textBox";
    form2.txtMyTextBox = a;

    form2.Owner = this;
    form2.ShowDialog(this);
}

//on Form2 I set Public String
public string txtMyTextBox
{
    get { return txt1.Text; }
    set { txt1.Text = value; }
}

如何在我的 ComboBox 下拉菜单中设置所选项目?我尝试了在 TextBoxes 中使用的相同方式,但它不起作用。

//Tried for combobox 
public string myCb2
{
    get { return cb2.Text; }
    set { cb2.SelectedValue = value; }
}

【问题讨论】:

  • 你的方法的输出是什么?
  • 在我最初的方法中,组合框为空(未选择任何项目)。我使用了 MD.unicorn 的解决方案,现在可以使用了。

标签: c# winforms combobox


【解决方案1】:

您可以在表单的属性中公开 ComboBox 的 SelectedIndex 属性:

public int MySelectedIndex // user a more appropriate name
{
    get { return cb2.SelectedIndex; }
    set { cb2.SelectedIndex = value; }
}

这只会为您提供索引。如果需要选中项的文字,需要使用SelectedItem

public string MySelectedItem // user a more appropriate name
{
    get { return cb2.SelectedItem.ToString(); }
}

我使用了ToString() 方法,因为SelectedItem 的类型是对象。根据您在 ComboBox 的 Items 属性中填写的对象,基础类型可以是任何类型。如果你把字符串放在里面,你会得到字符串,然后你可以使用一个演员:

public string MySelectedItem // user a more appropriate name
{
    get { return (string)cb2.SelectedItem; }
    set { return cb2.SelectedItem = value; }
}

【讨论】:

  • 我使用了您建议的第三个选项,它有效。谢谢大家的帮助。
  • 不客气。但请记住,它仅适用于您的项目类型为string
【解决方案2】:

尝试使用SelectedIndex并将其分配给Items集合中value的索引:

set { cb2.SelectedIndex = cb2.Items.IndexOf(value); }

【讨论】:

  • 这行得通(这意味着value 存在于Items 集合中),他可以使用cb2.SelectedItem = value;
【解决方案3】:

根据我的理解,更好的方法是在 Form2 的构造函数中传递值,并在 From2_Load 事件中设置控件的值,对于组合框设置,它的 itemouce 比设置选定值(确保 itemouce 包含选定值并且都具有相同的实例。)

【讨论】:

    【解决方案4】:

    最初将数据传递/设置到表单的一种方法是创建一个构造函数,将这些值设置给控件。

    public Form2(string initText, object selectedValue) {
        this.txtMyTextBox.Text = initText;
        this.cb2.SelectedValue = selectedValue;
    }
    

    另一种方法是公开/创建适用于控件的公共属性,如果要发送的值更多..

    【讨论】:

    • 我了解在构造函数中传递值的好处,但由于我必须向 Form2 传递超过 15 个值,所以我没有走那条路。但会记住这一点。谢谢。
    猜你喜欢
    • 2018-12-06
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多