|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 28
|
|||||||||||
Передать ссылку на форму в конструкторе18.08.2016, 16:18. Показов 9314. Ответов 9
Метки нет (Все метки)
Здравствуйте!
Есть два файла Form1.cs и Protocol.cs, на форме Form1 располагается listBox1, в который выводятся отладочные сообщения при работе некоего протокола обмена. Как в класс Protocol передать ссылку на Form1, чтобы все методы класса Protocol могли записывать данные в listBox1? Пока передаю в метод ссылку на this, и тогда метод BootloaderInit() записывает данные в listBox1. А хочется один раз, например в конструкторе или еще как. Form1.cs
0
|
|||||||||||
| 18.08.2016, 16:18 | |
|
Ответы с готовыми решениями:
9
Передать форму как ссылку Как передать ссылку на форму (Синтаксическая ошибка: идентификатор "Form1") Передать метод в конструкторе |
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.08.2016, 17:31 | |
|
Joint14, избитая тема, на которую отвечали тысячу раз и писали FAQ. Никакой ссылки на форму в классе Protocol быть не должно, там должно быть событие, на которое вы подписываетесь на форме и в его обработчике делаете все что нужно.
1
|
|
|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 28
|
|
| 19.08.2016, 09:31 [ТС] | |
|
И на том спасибо, теперь читаю про события и делегаты.
А не сможет ли кто поподробнее объяснить, как мне сделать такое: допустим, что у меня есть одна форма Form1, на этой форме одна кнопка, в обработчике этой кнопки есть код, который по определенному протоколу выполняет запись в порт (SerialPort), например, записывает в порт один байт 7F (HEX) и в случае получения в ответ байта 79 (HEX), считается, что связь установлена. Это одно из действий, а действий может быть много (установить связь, стереть, прочитать, записать, верифицироать...). Это один из протоколов, самый примитивный, его использует аппаратный загрузчик, прошитый в системную память микроконтроллера. Поскольку протоколов (или действий) может быть несколько, а их действия аналогичны, то я решил создать отдельный файл Protocol01.cs и вынести в него все методы протокола 01, предполагается, что в файле Protocol02.cs будут методы протокола 02. Также на форме есть listBox, он используется для отображения обмена. Сейчас я через делегат могу печатать в listBox1 отчет, например [09:26:34.567] Serial Port COM1 Opened W: [09:26:35.175] 7F R: [09:26:35.240] 79 Я вообще правильно думаю или можно как-то по-другому сделать?
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 19.08.2016, 10:26 | |
|
Joint14, из вашего описания я плохо понимаю, чем отличаются протоколы друг от друга и как все это используется. Возможно, там можно что-то от чего-то унаследовать, что-то упростить/объединить и тд. В целом, про то, чтобы сделать человекопонятный класс-обертку над работой с портом и байтами, конечно, мыслите правильно.
1
|
|
|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 28
|
||||||
| 19.08.2016, 13:53 [ТС] | ||||||
|
EvilFromHell, хочется сделать просто: нажимаем кнопку на форме и какой бы протокол не использовался (на данный момент достаточно одного протокола) - происходит обновление прошивки устройства через последовательный порт компьютера, а весь обмен (HEX-to-string) с метками времени виден в listBox1.
![]() Добавлено через 3 минуты Кому интересно, в конструктор передается делегат
0
|
||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 19.08.2016, 15:01 | |
|
Что-то странное. Чем вас не устраивает стандартная модель событий? Почему в методы Class1 передается какой-то листбокс, хотя он там не используется? Контролы формы не должны передаваться в методы каких-то других классов. Class1 ничего не должен знать ни про какие формы и контролы. Почитайте эти FAQ. Там написано и про события, и про архитектуру вообще.
1
|
|
|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 28
|
|
| 19.08.2016, 15:10 [ТС] | |
|
Спасибо! Почитаю! Проблема в том, что я вообще С-шник, пишу для микроконтроллеров, но периодически приходится писать маленькие приложения для Windows. Вот оттуда и непонимание ООП.
Мне всего-то нужно, чтобы класс в котором реализован протокол обмена (Windows-serialPort-Device) выводил команды с метками времени в listBox1 на Form1, это на время отладки, а потом я это уберу и обмен можно будет "наблюдать" в progressBar. Идея в хранении протоколов в отдельных *.cs файлах, в отдельных классах, а обмен можно наблюдать в родительской форме. Чтобы меньше править.Что-то странное. Чем вас не устраивает стандартная модель событий? Почему в методы Class1 передается какой-то листбокс, хотя он там не используется? Чтобы любой протокол, реализованный во внешнем файле мог выводить отладочную информацию в listBox1 формы, куда-то на форму он должен её выводить. Раньше я выводил в текстовый файл, но это не удобно, а здесь - идет обновление и мы видим процесс в listBox1.
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||
| 19.08.2016, 15:43 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 28
|
||
| 19.08.2016, 15:51 [ТС] | ||
![]() Понятно, что на форме нажали кнопку и в обработчике вызвали метод класса (вызвали какую-либо функцию протокола), а дальше ничего не понимаю, какие у меня события должны быть? Допустим, по кнопке отправили в порт байт 7F, отправили байт - произошло событие. Через некоторое время, например 50 мс, в порт пришел ответ 79. Приход в порт этого байта, вроде как должно быть событием. На это событие должен отреагировать listBox1, т.е. добавить в listBox1 строку вида R:[Метка времени] 79. Пока не знаю, как это сделать (если я правильно предполагаю).
0
|
||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||
| 19.08.2016, 16:06 | ||
|
Joint14, ну что такое обработчик кнопки? У кнопки есть событие Click, которое вызывается тогда, когда на кнопку нажали. Но кнопка ничего не знает про класс формы, на которой будет обрабатываться это событие. Она просто инициирует событие и все. А на форме, или в абсолютно любом другом классе, можно подписаться на событие и выполнить тогда, когда оно произойдет, произвольный код. В результате и кнопка не зависит ни от чего, и нужный код на форме вызывается по ее клику.
Добавлено через 5 минут Суть абсолютно та же, что и с делегатом, только гораздо удобнее синтаксически.
1
|
||
| 19.08.2016, 16:06 | |
|
Помогаю со студенческими работами здесь
10
Как в конструкторе класса передать параметром указатель на функцию?
Комбинация: обязательное поле в конструкторе таблиц и команда закрыть форму, не работает При попытке открыть форму в конструкторе, сообщается, что не найден setting.xml Передать ссылку на this Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|