将选定的组合框项目放入标签

时间:2019-03-21 22:27:24

标签: c# forms winforms combobox

您好,我遇到错误,无法解决。我试图在组合框中选择一个对象,然后将对象名称显示在标签中。

这是我的课程:

class Film
    {
        public string  Naam { get; set; }
        public Film(string naam)
        {
            Naam = naam;
        }
        public override string ToString()
        {
            return $"{Naam}";
        }
    }

这是我表格的代码

public partial class Form1 : Form
    {
        List<Film> filmlijst;
        public Form1()
        {
            InitializeComponent();
            filmlijst = new List<Film>();
        }
        private void button1_Click(object sender, EventArgs e)
        {  
            Film film = new Film(textBox1.Text);

                filmlijst.Add(film);
                comboBox1.DataSource = null;
                comboBox1.DataSource = filmlijst;
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
                label1.Text = ((Film)comboBox1.SelectedItem).Naam;
        }
    }

因此,我创建了一个带有文本框的Film对象以为其命名。 如果我要添加多部电影,没有以下代码行,我的组合框将不会重新加载:

comboBox1.DataSource = null;

没有这行代码,我可以在TextLabel中看到我的对象的名称。 但是后来我无法添加更多对象,因为它不会重新加载。

2 个答案:

答案 0 :(得分:2)

您需要使用BindingSource来使组合知道列表的更改,并在添加项目时将其添加到 BindingSource

首先在类级别声明 BindingSource 变量

vpc1

然后使用表单构造函数

public partial class Form1 : Form
{
     BindingSource bs = new BindingSource();
     ....

最终将项目添加到 BindingSource 中,而不是直接添加到列表中

public Form1()
{
    filmlijst = new List<Film>();
    bs.DataSource = filmlijst;
    comboBox1.DataSource  = bs;
}

这是来自docs的BindingSource的备注部分

  

BindingSource组件有许多用途。首先,它简化了   通过提供货币管理,将表单上的控件绑定到数据,   Windows窗体控件之间的更改通知和其他服务   和数据源。这是通过附加BindingSource来完成的   使用DataSource属性将其添加到数据源中。

答案 1 :(得分:0)

尝试添加

private void button1_Click(对象发送者,EventArgs e)             {                 电影胶片=新电影(textBox1.Text);

            filmlijst.Add(film);
            comboBox1.DataSource = null;
            comboBox1.DataSource = filmlijst;
            var comboboxItemCount = comboBox1.Items.Count; 
            int x = Convert.ToInt32(comboboxItemCount-1);

            comboBox1.Text = comboBox1.Items[x].ToString();
        }