Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311

Если в одном ComboBox выбрано определенное значение, то его уже нельзя выбрать в другом

27.11.2013, 09:49. Показов 6446. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать на одной форме взаимосвязанные комбобоксы, они заполняются из одного источника и не должны содержать одинаковые значения в одно время, те если например в одном комбобоксе выбрано определенное значение, то его уже нельзя выбрать в другом, пока в первом не освободится оно
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2013, 09:49
Ответы с готовыми решениями:

В зависимости от того, что выбрано в одном Combobox в другом на выборку давалось другое
как сделать так, чтобы в зависимости от того, что выбрано в одном комбобоксе в другом на выборку давалось другое?

Пока не выбрано значение в NumericUpDown1 нельзя нажать на кнопку
надо что бы пока не выбрано какое то значение (от 1 до 9999999) не 0 и пустое поле в NumericUpDown1 нельзя было нажать на button1 короче...

Если значение ComboBox повторяется, то на листе в другом столбце данные обновляются
Подскажите пожалуйста, у меня есть ComboBox, который выводит данные на лист, как реализовать код, если значение ComboBox повторяется, то на...

11
7 / 7 / 2
Регистрация: 27.11.2013
Сообщений: 24
27.11.2013, 11:13
создайте отдельный класс или структуру для значения и добавьте в него булево поле Selected
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
27.11.2013, 11:50  [ТС]
А отслеживать все это как? они активны все. Такие мысли витают по поводу класса и тд, но воедино не могу все соединить(
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
27.11.2013, 13:47  [ТС]
Нашел в интернете пример, никак не могу скомпилировать, помогите разобраться в чем дело.

In my project I have about 100 comboboxes, every combobox holds the same items. I want to "update" every combobox like this:

When an item is selected in combobox A, all other comboboxes shouldn't hold this item anymore. Likewise, when the selected item from combobox A changes again, the previous item should appear on the other comboboxes again, etc etc, and I want this to happen for every single combobox.

What's the best way to accomplish this? With as less code and without timers, if possible

и ответ

Use a helper class that handles the changing and keeps track of the current selected items. Something like this:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class ComboboxSwitcher
{
    List<ComboBox> boxlist = new List<ComboBox>();
    Dictionary<ComboBox, object> olditems = new Dictionary<ComboBox, object>();
 
    public void Add(params ComboBox[] boxes)
    {
        boxlist.AddRange(boxes);
        boxes.ToList().ForEach(box => box.SelectedIndexChanged += handler);
    }
 
    private void handler(object sender, EventArgs e)
    {
        ComboBox trigger = (ComboBox) sender;
        object item = trigger.SelectedItem;
        object olditem = null;
        if (olditems.ContainsKey(trigger)) olditem = olditems[trigger];
 
        boxlist.ForEach(box =>
                            {
                                if (box != trigger)
                                {
                                    if (olditem != null) box.Items.Add(olditem);
                                    box.Items.Remove(item);
                                }
                            });
 
        olditems[trigger] = item;
    }
}
Add all combo boxes via the Add method like this:
C#
1
2
3
4
5
List<string> items = new List<string> { "A", "B", "C", "D" };
comboBox1.Items.AddRange(items.ToArray());
comboBox2.Items.AddRange(items.ToArray());
comboBox3.Items.AddRange(items.ToArray());
new ComboboxSwitcher().Add(comboBox1, comboBox2, comboBox3);
The class registers a SelectedIndexChanged handler for all comboboxes to be informed of changes.

In case of a selection change it checks, if there is a previously selected value for this combox (using the internal dictionary structure). It then iterates all comboboxes and changes the items, ie. removes the newly selected one and adds the old one to all boxes except the box that had the change. Finally it updates ints internal dictionary.

You didnt need to keep track of current selections in the other comboboxes as the selection there doesn't change.

And you may build distinctive groups of comboboxes by using multiple instances of this class.


Никак не могу не добавить не использовать
0
7 / 7 / 2
Регистрация: 27.11.2013
Сообщений: 24
27.11.2013, 14:09
Ну можете попробовать вот так сделать:

В форму добавьте поля
C#
1
2
        private string[] _items =  { "Голова", "Рука", "Нога" };
        private System.Windows.Forms.ComboBox[] _comboBoxes = new ComboBox[2];
Далее в конструкторе формы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public Form1()
        {
            InitializeComponent();
 
            _comboBoxes[0] = comboBox1;
            _comboBoxes[1] = comboBox2;
 
            foreach (var comboBox in _comboBoxes)
            {
                comboBox.Items.AddRange(_items);
                comboBox.DisplayMember = "Title";
                comboBox.ValueMember = "Title";
            }
        }
Далее создайте метод обработчик события изменения индекса комбобокса, ну и собственно не забудьте подписать его на событие, у меня получилось что то типа такого
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void OnSelectedIndexChange(object sender, EventArgs e)
        {
            for (int i = 0; i < _comboBoxes.Length; i++)
            {
                if (_comboBoxes[i] == sender)
                {
                    for (int j = 0; j < _comboBoxes.Length; j++)
                    {
                        if (j != i)
                        {
                            _comboBoxes[j].Items.Add(_comboBoxes[i].SelectedItem);
                            _comboBoxes[j].Items.Remove(_comboBoxes[i].SelectedItem);
                        }
                    }
                }
            }
        }
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
27.11.2013, 14:18  [ТС]
Что вы имеете ввиду под -"создайте метод обработчик события изменения индекса комбобокса, ну и собственно не забудьте подписать его на событие,"

Добавлено через 1 минуту
И почему я не могу Вам поставить спасибо? Видимо из-за того что вы недавно на этом форуме?
0
7 / 7 / 2
Регистрация: 27.11.2013
Сообщений: 24
27.11.2013, 14:34
Цитата Сообщение от fromdd Посмотреть сообщение
метод обработчик события
- так называют методы которые подписывают на событие

у комбобокса есть событие .SelectedIndexChanged ниже строка это подписание метода обработчика на событие
C#
1
 this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.OnSelectedIndexChange);
Цитата Сообщение от fromdd Посмотреть сообщение
И почему я не могу Вам поставить спасибо?
Честно говоря я не знаю, только зарегистрировался на этом форуме, можно и на словах
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
27.11.2013, 14:53  [ТС]
Спасибо , попробую разобраться.

Т.е. грубо говоря мне надо у комбобокса в свойствах в событиях создать обработчик SelectIndexChanged, он мне по умолчанию создаст
C#
1
2
3
4
 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
 
        }
и туда уже вписать строку
C#
1
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.OnSelectedIndexChange);
Добавлено через 50 секунд
и что еще такое EventHandler ?
0
7 / 7 / 2
Регистрация: 27.11.2013
Сообщений: 24
27.11.2013, 15:11
у комбобокса уже есть это событие вам нужно подписать на него свой метод обработчик события comboBox1_SelectedIndexChanged(object sender, EventArgs e)

это можно сделать либо руками или в дизайнере правой кнопкой кликнуть по комбобоксу => свойства => в окне свойств иконка молния там будут все события комбобокса, найдите SelectedIndexChanged и подпишите (просто выбрав в выпад. меню) его comboBox1_SelectedIndexChanged если вы это сделаете то в классе формы автоматически сгенерится код посмотрите и поймете о чем я писал.

Цитата Сообщение от fromdd Посмотреть сообщение
и что еще такое EventHandler ?
Это класс делегат с которым мы сообщаем метод обработчик и таким образом мы подписываемся на событие, почитайте что такое событие в C#. Само поле события имеет тип класса делегата EventHandler
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
27.11.2013, 15:26  [ТС]
Потихоньку начинает проясняться, СПАСИБО
Но он их удаляет, а можно сделать так что если пользователь например в первом комбобоксе выбрал значение "нога", то во втором комбобоксе оно уже не отображается при выборе, те там только "рука" и "голова". При этом если он в первом перевыбрал значение, то старое значение добавляется в доступные для других комбобоксов, их где то около 7 штук
0
7 / 7 / 2
Регистрация: 27.11.2013
Сообщений: 24
27.11.2013, 15:30
Вот картинка что бы было понятно


Цитата Сообщение от fromdd Посмотреть сообщение
Но он их удаляет, а можно сделать так что если пользователь например в первом комбобоксе выбрал значение "нога", то во втором комбобоксе оно уже не отображается при выборе, те там только "рука" и "голова". При этом если он в первом перевыбрал значение, то старое значение добавляется в доступные для других комбобоксов, их где то около 7 штук
Можно, ну вы уже сами подумайте
0
4 / 4 / 0
Регистрация: 19.03.2011
Сообщений: 311
28.11.2013, 12:02  [ТС]
Думаю, не получается пока реализовать))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2013, 12:02
Помогаю со студенческими работами здесь

Как проверить выбрано ли значение combobox
Собственно как сделать?

Из за чего на одном компьютере можно заниматся веб пронраммированием а на другом нельзя
Купид hp g62 с процессором от интел, работал ка нем делал сайты на друпале 8, все шло как по маслу, потом он сломался. Купил еще один hp...

Как определить, в каком из ComboBox было выбрано значение
Здравствуйте. В Excel документе есть 4 выпадающих списка, все они связаны с одним и тем же макросом, как определить из какого списка пришел...

Реализовать строку в ComboBox, которую нельзя выбрать
Можно ли в комбобоксе сделать строку, которую нельзя выбрать? Мне она нужна в виде разделителя. Что-то вроде названия категории.

Как из строки значений, где есть положительные и отрицательные числа, выбрать первое положительное значение и выставить его отдельно в другом месте.
Как из строки значений в Экселе, где есть положительные и отрицательные числа, выбрать первое положительное значение и выставить его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru