Альтернатива добавлению нескольких элементов класса в несколько полей со списком? C # - PullRequest
0 голосов
/ 12 октября 2019

У меня есть класс Fish, и я пытаюсь отобразить различные виды в поле со списком, то, как я сейчас это делаю, слишком утомительно, должен быть лучший способ.

В «Species1» вы можете видеть, как я пытаюсь добавить один и тот же вид во все 4 поля со списком.

У меня есть 4 поля со списком, и я хочу отобразить эти 9 видов рыб во всех 4 полях со списком, позволяя пользователю выбрать, какие 4 вида он поймал.

            Species1 = new Fish("Angler",5);
            Catch1ComboBox.Items.Add(Species1.Getspecies());
            Catch2ComboBox.Items.Add(Species1.Getspecies());
            Catch3ComboBox.Items.Add(Species1.Getspecies());
            Catch4ComboBox.Items.Add(Species1.Getspecies());
            Catch1ComboBox.SelectedIndex = 0;

            Species2 = new Fish("Cod", 3);
            Catch1ComboBox.Items.Add(Species2.Getspecies());

            Species3 = new Fish("Haddock", 4);
            Catch1ComboBox.Items.Add(Species3.Getspecies());

            Species4 = new Fish("Hake", 1);
            Catch1ComboBox.Items.Add(Species4.Getspecies());

            Species5 = new Fish("Horse Mackerel", 0.5m);
            Catch1ComboBox.Items.Add(Species5.Getspecies());

            Species6 = new Fish("Witches", 3);
            Catch1ComboBox.Items.Add(Species6.Getspecies());

            Species7 = new Fish("Plaice", 8);
            Catch1ComboBox.Items.Add(Species7.Getspecies());

            Species8 = new Fish("Skate and Rays", 1.8m);
            Catch1ComboBox.Items.Add(Species8.Getspecies());

            Species9 = new Fish("Whiting", 7);
            Catch1ComboBox.Items.Add(Species9.Getspecies());

1 Ответ

0 голосов
/ 12 октября 2019

Начните с помещения всех видов в список:

var species = new List<object> {
    new Fish("Angler", 5).GetSpecies(),
    new Fish("Cod", 3).GetSpecies(),
    new Fish("Haddock", 4).GetSpecies(),
    new Fish("Hake", 1).GetSpecies(),
    new Fish("Horse Mackerel", 0.5m).GetSpecies(),
    new Fish("Witches", 3).GetSpecies(),
    new Fish("Plaice", 8).GetSpecies(),
    new Fish("Skate and Rays",1.8m).GetSpecies(),
    new Fish("Whiting", 7).GetSpecies()
}

А затем установите копию списка как DataSource всех ваших ComboBox объектов:

Catch1ComboBox.DataSource = new BindingList<object>(species);
Catch2ComboBox.DataSource = new BindingList<object>(species);
Catch3ComboBox.DataSource = new BindingList<object>(species);
Catch4ComboBox.DataSource = new BindingList<object>(species);

Использование new BindingList предназначено для предотвращения подключения всех полей со списком к одному и тому же источнику и, следовательно, к принудительному удержанию одного и того же значения.

Пример этого приведен в документации Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...