#c# #.net #winforms
#c# #.net #winforms
Вопрос:
У меня есть два программно созданных поля со списком ниже. Оба используют одни и те же элементы. Элементы состоят из яблока, банана, арбуза.
Как я могу сделать элемент уникальным, чтобы
-
Сценарий 1. При выборе «Apple» из выпадающего списка 1, в выпадающем списке 2 не будет отображаться «Apple».
-
Сценарий 2. При выборе «Банана» из выпадающего списка 2 в выпадающем списке 1 не будет отображаться «Банан»
Кроме того, это делается на C # с использованием приложения Winform.
for (int i = 0; i < 2; i )
{
ComboBox cb = new ComboBox();
cb.Items.Add("Apple");
cb.Items.Add("Banana");
cb.Items.Add("Watermelon");
cb.Name = "ComboBox" i.ToString();
cb.SelectedIndexChanged = new EventHandler((object sender, EventArgs e) =>
{
for (int a = 0; a < 2; a )
{
ComboBox sequenceUpdate = (ComboBox)flowLayoutPanelA.Controls.Find(i, true)[0];
}
});
flowLayoutPanelA.Controls.Add(cb);
}
Ответ №1:
Вы должны определить Fruit
класс и определить его коллекцию для повторного использования, возможно, даже репозиторий. Я просто написал самым простым способом, и приведенные ниже блоки пока заполняют счет.
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
_fruits = new List<Fruit>{
new Fruit(0, "--Choose--"),
new Fruit(1, "Apple"),
new Fruit(2, "Banana"),
new Fruit(3, "Watermelon"),
};
LoadComponent(comboBox1, _fruits);
}
private readonly IEnumerable<Fruit> _fruits;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
LoadComponent(comboBox2, comboBox1.SelectedIndex == 0
? null
: _fruits.Where(x => x.Id != Convert.ToInt32(comboBox1.SelectedValue)).ToList());
}
private void LoadComponent(ListControl control, IEnumerable<Fruit> source) {
control.DataSource = source;
control.ValueMember = "Id";
control.DisplayMember = "Name";
}
}
class Fruit {
public Fruit(int id, string name) {
Id = id;
Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
}
Ответ №2:
Без какого-либо кода в вопросе невозможно дать вам ответ, который будет работать с вашим проектом.
Однако в общих чертах вы могли бы заполнить значения второго поля, используя .Событие OnChanged с первого, использующее что-то вроде этого:
IList<string> boxASource = new List<string> { "Apple", "Banana", "Watermelon" };
string selectedValueA = boxASource[0];
IList<string> boxBSource = boxASource.Where(x => !x.Equals(selectedValueA)).ToList();