Поместите выбранный элемент комбинированного списка в ярлык - PullRequest
1 голос
/ 22 марта 2019

Здравствуйте, у меня ошибка, и я не могу ее понять.Я пытаюсь выбрать объект в своем поле со списком и отобразить имя объекта в метке.

Это мой класс:

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 ]

2 голосов
/ 22 марта 2019

Вам необходимо использовать BindingSource , чтобы комбо было в курсе изменений в вашем списке, а когда добавляете элементы, добавьте их в BindingSource

Сначала объявитепеременная BindingSource на уровне класса

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

Затем в конструкторе формы

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

наконец добавьте элементы в BindingSource , а ненепосредственно к вашему списку

    private void button1_Click(object sender, EventArgs e)
    {  
        Film film = new Film(textBox1.Text);
        bs.Add(film);
    }

Это из раздела замечаний документов о BindingSource

Компонент BindingSource служит многим целям.Во-первых, он упрощает привязку элементов управления в форме к данным, обеспечивая управление валютой, уведомление об изменениях и другие службы между элементами управления Windows Forms и источниками данных.Это достигается путем присоединения компонента BindingSource к источнику данных с использованием свойства DataSource.

0 голосов
/ 22 марта 2019

Попробуйте добавить это

private void button1_Click (отправитель объекта, EventArgs e) {Film film = new Film (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();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...