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

Передача данных между формами + поиск в ComboBox

15.03.2021, 19:19. Показов 1496. Ответов 10

Студворк — интернет-сервис помощи студентам
Здравствуйте. Интересует два вопроса( перерыл данный форум и сотни ссылок поисковиков, но не нашел рабочий для себя вариант).
1 вопрос: Передача данных между формами. На форме 1 имеется DataGridView, при двойном нажатии в ячейке - открывается вторая форма и в текстбокс второй формы помещается содержимое активной ячейки таблицы первой формы.
При нажатии кнопки на второй форме, новое содержимое текстбокса этой же формы помещаем в активную ячейку первой формы (где был совершен даблклик). Вторую форму закрываем.

2 вопрос: поиск в combobox. Прочёл массу примеров. Но, ищет либо по первому символу, либо всё связано с БД. Мне же нужен поиск по коллекции combobox. Без привлечения кнопок,таблиц,листбоксов.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2021, 19:19
Ответы с готовыми решениями:

Передача данных в БД между формами
Ребята, выручайте) Суть в чем: На Form1 у меня есть Datagridview, подключена база, с первой формы я вызываю вторую форму "Добавить...

Передача данных между формами
Имеется Form1 и Form2. В Form1 по нажатию на крестик формы, не закрываю ее, а сворачиваю. private void...

Передача данных между формами
Понимаю, что похожие вопросы 1000 раз обсуждались, однако решение свое проблемы ни где не нашел. Нужно при открытии новой формы (именно...

10
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
15.03.2021, 20:16
Цитата Сообщение от lMyzhik Посмотреть сообщение
1 вопрос:
Если Вы загляните в код FormXXX.Designer.cs, то увидите, что все элементы, которые были положены на форму в конструкторе, не имеют явной директивы видимости , а сам метод InitializeComponents объявлен как private. Это значит, что и все Ваши боксы, комбобоксы, кнопки и проч. тоже private, т.е. не видимы извне.

Для того, чтобы из одной формы передать в другую какие-то данные, есть несколько способов
1) Через конструктор
2) Через подписку
3) Через класс-кэш (обычно статический), видимый всем формам
4) Через динамическое создание элементов в самой форме, объявленных как public

Добавлено через 2 минуты
Цитата Сообщение от lMyzhik Посмотреть сообщение
2 вопрос: поиск в combobox
Вопрос не понял Вам нужен автоматический выбор походящего итема в комбобоксе или Вам нужно автораскрытие списка итемов с установкой на подходящий ?

Добавлено через 8 минут
По первому вопросу явно напрашивается использование классов-моделей. Главная форма по кнопке на гриде создает экземпляр Модели, куда помещает все ячейки(поля) текущей записи грида, после чего либо создает Форму2, передавая в ее конструктор указатель на объект Модели, либо записывает его в класс-кэш. Вторая форма либо адресуется к Модели через свое собственное поле (куда и попадает ссылка на Модель в коде конструктора) либо к полю "кэша".
Для обратной передачи данных (юзер ввел или исправил поля записи) из Формы2 новые данные кладутся в Модель, которая передается обратно либо через "ждущий" public-метод Главной формы, либо в кэш, откуда ее и забирает Главная форма.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 61
15.03.2021, 21:08  [ТС]
https://codernotes.ru/articles... rugoj.html
Первый вопрос был решен с помощью 3 способа из данной ссылки.

Второй вопрос. Нужен поиск типа: имеются, допустим, элементы коллекции "123","456", "981". При вводе "1" мне предложит как "123",так и "981".
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
15.03.2021, 21:38
lMyzhik, Способ 3 из ссылки - костыль из костылей, ибо лазать руками в автоматически создаваемый код - искать себе приключения.

Второй вопрос так и остался загадкой. Если просто перебором итемов комбобокса, то алгоритм сравнения задавайте сами какой нужно. И неясно, что делать когда найден - сделать его выбранным или как ?
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 61
15.03.2021, 21:57  [ТС]
Так лезть в автоматически создаваемый код и не надо. Всё доступно в свойствах компонента.

Второй вопрос не является загадкой. Допустим, поиск дал несколько результатов. Пользователь выбирает нужный ему и итем становится активным.
0
dive
 Аватар для I can
4956 / 4649 / 844
Регистрация: 13.04.2015
Сообщений: 9,850
15.03.2021, 22:04
Цитата Сообщение от lMyzhik Посмотреть сообщение
Так лезть в автоматически создаваемый код и не надо.
Хорошо хоть так. А то можно в один прекрасный момент обнаружить, что "всё пропало, шеф"(с)
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.03.2021, 04:00
Цитата Сообщение от lMyzhik Посмотреть сообщение
Так лезть в автоматически создаваемый код и не надо. Всё доступно в свойствах компонента.
Вы имеете в виду property Modifiers
Костыль при этом остается костылем, даже покрашенный в розовый цвет

Добавлено через 8 минут
Цитата Сообщение от lMyzhik Посмотреть сообщение
Допустим, поиск дал несколько результатов. Пользователь выбирает нужный ему и итем становится активным.
Поиск в чем, в итемах комбобокса ? Ну, допустим , 8-й, 211-й и 512-й итем списка с чем-то там совпал, и что ? При этом виден только один из них и неясно есть ли еще "совпавшие" - юзер должен прокручивать весь список туда-сюда ? Или надо фильтровать список и показывать только совпавшие ? Опять же с чем сравнивать - с содержимым окна ? Как быть тогда с пипочкой и выпадающим списком - когда его открывать, когда закрывать ? Или список постоянно развернут и меняется при вводе каждого символа в окно ? Вопросов много, ясных ответов - нет.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 61
18.03.2021, 14:52  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Поиск в чем, в итемах комбобокса ? Ну, допустим , 8-й, 211-й и 512-й итем списка с чем-то там совпал, и что ? При этом виден только один из них и неясно есть ли еще "совпавшие" - юзер должен прокручивать весь список туда-сюда ? Или надо фильтровать список и показывать только совпавшие ? Опять же с чем сравнивать - с содержимым окна ? Как быть тогда с пипочкой и выпадающим списком - когда его открывать, когда закрывать ? Или список постоянно развернут и меняется при вводе каждого символа в окно ? Вопросов много, ясных ответов - нет.
Так подскажите мне,как можно грамотно и красиво реализовать поиск. Любой вариант.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.03.2021, 15:17
Цитата Сообщение от lMyzhik Посмотреть сообщение
Так подскажите мне,как можно грамотно и красиво реализовать поиск.
Вариантов масса.

Например, UserControl с TextBox, CheckBox + 2 ListBox.

Вверху контейнера TextBox для ввода образца и CheckBox для переключения режимов "поиск" и "фильтр"
Внизу ListBox со списком для показа и ListBox скрытный с полным списком
Изначально оба листа содержат один и тот же список.

При изменении в TexBox выполняется одно из двух:
1. Режим "поиск"
Ищется в ListBox, который видим, первый подходящий итем и делается текущим (выделяется цветом)
2. Режим "фильтр"
Видимый ListBox очищается, невидимый просматривается и все совпадающие итемы копируются в видимый, Первый в списке становится текущим и выделенным.
3. Выбор по клику на ListBox как обычно.
4. При переключении чекбокса делать автоматический поиск (фильтрацию) по содержимому TextBox
5. При очистке TextBox юзером восстанавливать видимый ListBox вне зависимости от режима.

Это UserControl можно многократно использовать в разных местах GUI, включая на разных формах.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 61
18.03.2021, 15:27  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Вариантов масса.

Например, UserControl с TextBox, CheckBox + 2 ListBox.

Вверху контейнера TextBox для ввода образца и CheckBox для переключения режимов "поиск" и "фильтр"
Внизу ListBox со списком для показа и ListBox скрытный с полным списком
Изначально оба листа содержат один и тот же список.

При изменении в TexBox выполняется одно из двух:
1. Режим "поиск"
Ищется в ListBox, который видим, первый подходящий итем и делается текущим (выделяется цветом)
2. Режим "фильтр"
Видимый ListBox очищается, невидимый просматривается и все совпадающие итемы копируются в видимый, Первый в списке становится текущим и выделенным.
3. Выбор по клику на ListBox как обычно.
4. При переключении чекбокса делать автоматический поиск (фильтрацию) по содержимому TextBox
5. При очистке TextBox юзером восстанавливать видимый ListBox вне зависимости от режима.

Это UserControl можно многократно использовать в разных местах GUI, включая на разных формах.

А Вы не подскажите, где-либо видели примеры подобных реализаций?
О подобном читал, но не пробовал реализовать
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
18.03.2021, 15:51
Вариант 2
Тоже UserControl
TextBox, кнопка-"пипочка" для выпадания списка, чекбокс для переключения режима (пусто - поиск, галка-фильтрация)
ListBox, изначально невидимый, ListBox всегда невидимый с полным списком.
По нажатию на "пипочку" или выполняется все то же, что в первом случае, но 1-й ListBox отображается непосредственно под TexBox (имитация Combobox). При изменении текста в TextBox или переключении режимов опять-таки как в 1-м варианте.
При потере фокуса UserControl или клику на ListBox ListBox прячется.

Да, чуть не забыл, в обоих вариантах по клику на ListBox выбранный итем переносится в TextBox.

Добавлено через 1 минуту
Цитата Сообщение от lMyzhik Посмотреть сообщение
О подобном читал, но не пробовал реализовать
Ну дык попробуйте, думаю, Вам понравится

Добавлено через 19 минут
Если боитесь UserControl`а (все новички обычно боятся этого чупакабрика),
то сделайте то же самое на простой Panel
1) Положите на форму Panel,
2) На нее положите все необходимые контролы, в соответствии с выбранным вариантом.
3) Красиво их стилизуйте и отпозиционируйте. "Теневому" ListBox сразу выставьте visible=false
Тут ремарочка для варианта 2. Чтобы ListBox1 не занимал лишнего места на форме, а был виден только при нажатой "пипочке", его родителем следует указать не панель, а форму. Тогда при показе он просто нарисуется поверх контента формы, как это делает ComboBox.
4) Напишите метод начального заполнения теневого ListBox и копирования его в ListBox1.
Вызовите этот метод сразу после инициализации формы.
5) Назначьте слушателей (обработчиков) следующих событий (Вариант 1, для 2-го сами сообразите)
- TextBox.TextChanged (A)
- CheckBox.Click (B)
- ListView.Click (C)
6) Напишите метод заполнения ListBox1 из ListBox теневого как указано выше (в соответствии с режимом)
7) В обработчиках событий A и B вызывайте метод заполнения - всего одна строчка кода
8) В обработчике C выбранный текст переносите в TexBox, не забыв отключить его обработчик A (иначе будет бесконечный цикл и программа зависнет), после чего опять включить. Если это сложно для Вас, можно воспользоваться тэгом TexBox, куда писать 1, если событие заблокировано, или 0 - если нет. Ну и в событии A проверять тэг

Добавлено через 4 минуты
Можно сделать чуть красивше
Вместо CheckBox, назначение которого юзеру будет изначально неясно, можно положить инконку с "лупой" или "воронкой". При клике на иконке менять картинки на кнопке, а дальше все как описано выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2021, 15:51
Помогаю со студенческими работами здесь

Передача данных между формами
Как передать данные из одной открытой формы другую. Я делаю следующее Формав которую передаю sf3=new Формав которую передаю(); ...

Передача данных между формами
Народ добрый, вот у меня такой вопрос: у меня есть три формы: Form1, Form2 и Form3. В первой форме находятся 2 кнопки: одна из них вызывает...

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

Передача данных между формами
Добрый день. Мне нужно что бы данные из textbox'ов формы 1 отображались в textbox'ах формы 2. Вот мой код, но на второй форме textbox'ы...

Передача данных между формами
Привет всем ! Есть 2 формы. Передаю данные следующим образом: Форма 1: public class MyClass { public...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru