您好,我遇到错误,无法解决。我试图在组合框中选择一个对象,然后将对象名称显示在标签中。
这是我的课程:
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中看到我的对象的名称。 但是后来我无法添加更多对象,因为它不会重新加载。
答案 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();
}