3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
|
|
1 | |
Обращение к контролам второй формы из первой11.05.2015, 15:35. Показов 2830. Ответов 13
Метки нет (Все метки)
Здравствуйте, уважаемые форумчане!
В первую очередь хочу перед вами извиниться за то, что сейчас задам вопрос, который задавали здесь до меня сто раз... Долго я читал то, что нашел в поиске, но то ли невнимательно читал, то ли не хватает мне пока понималки, но испытываю проблемы с этим до сих пор. Нужно получить из одной формы доступ к контролам другой. Самый быстрый и простой - через изменение модификатора доступа с private на public... однако, мне известно, что увидев такой код, любой нормальный кодер постарается ударить меня чем-то очень тяжелым Вот в этой теме => Ответы на 7 самых частых вопросов по WinForms Нашел для себя способ, который показался мне наиболее привлекательным по балансу простоты/правильности, а именно: Но при попытке данным способом воспользоваться сталкиваюсь с тем, что у меня он не работает. Прошу, научите меня пользоваться данным способом. Делаю предположение, что вставляю данные участки кода не туда, куда нужно.. или просто не понимаю чего-то в сути данного способа. Что пытаюсь сделать: Есть 2 формы. На первой форме - листбокс, который берет данные из текстового файлика. На второй форме - текстбокс. Первая форма - что то вроде списка справочника, вторая - его элемент. Нужно, чтобы при нажатии на элемент листбокса, открывалась форма с текстбоксом (уже реализовано), но не пустая, а с содержанием, соответствующим элементу списка листбокса, на который нажимаешь. С изменением модификатора доступа такая система работает... но так ведь нельзя. Помогите пожалуйста.
0
|
11.05.2015, 15:35 | |
Ответы с готовыми решениями:
13
Обращение из первой формы к элементам второй формы Обращение к функции первой формы из второй формы Обращение к контролам другой формы Обращение к контролам другой формы |
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
|
|
11.05.2015, 22:57 [ТС] | 3 |
this.data = data; У меня попросту нет такого варианта через оператор-точку, при попытке скопипастить - "не содержит определения для data и не найден метод расширения бла бла", не видит в общем. Что я делаю не так? Добавлено через 6 часов 31 минуту Вообще, что это за конструкция такая? Вроде как в С# у классов такого свойства нет. Пример в гайде - некорректен?
0
|
6451 / 4053 / 1598
Регистрация: 09.05.2015
Сообщений: 9,481
|
|
11.05.2015, 23:00 | 4 |
0
|
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
|
|
11.05.2015, 23:27 | 5 |
Возможно, вы забыли в свойстве Modifiers контрола родительской формы поставить значение Public.
0
|
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
|
|
13.05.2015, 00:09 [ТС] | 6 |
Someone007, да, добавил, переменную то эту видит прекрасно. Свойства такого нет.
Эхехех.. неужели нет нормального материала по этой теме. В гайде либо не рабочие, либо что-то недосказанно... Добавлено через 1 минуту chumich, именно этого я как раз стремлюсь всеми силами избежать, ведь это противоречит парадигме ООП. Цель того приложения, которое я сейчас пытаюсь таки сделать - исключительно учебная. Так зачем мне учиться кодить неправильно, ведь войдет в привычку, да так и останется.. Или я чего-то не понимаю?
0
|
13.05.2015, 00:17 | 7 |
Если на паблик, то да, но вот например в VB.Net контролы сохраняются с модификатором Friend (аналог шарповского internal) самим дизайнером форм по умолчанию и таких вопросов там обычно не возникает. Ну и говорить о том, что создатели дизайнера для бейсика - лохи, я бы тоже не стал. Это не лучший способ решить проблему, но в большинстве случаев он оказывается вполне себе приемлемым.
Не то чтобы я советовал этим способом воспользоваться, но как минимум иногда можно. Ну, а так, ну взять стандартные диалоговые окна. Там все реализовано довольно просто: У диалога обычно есть свойство, которому можно присвоить значение и именно это значение и отображается при запуске. Обычно из этого же свойства и результат берется.
0
|
6451 / 4053 / 1598
Регистрация: 09.05.2015
Сообщений: 9,481
|
|
13.05.2015, 00:19 | 8 |
Минимальный пример реализующий то что вы описали в 1 посте в моем понимании:
1
|
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
|
|
13.05.2015, 00:29 | 9 |
Что для вас неправильно? Изменение свойств контрола? Интересно, зачем тогда разработчики выводят их на всеобщее обозрение? Неужели они сознательно стремятся "испортить" нас?! Это чем-то похоже на то, если вы сидя в грязной робе, в телеге, голодный и держа в руке кусок жареного мяса, скажете, нет, я не хочу есть "как свинья", без вилки и ножа. Если какой-нибудь аристократ, узнает про это, то обязательно скажет: "фи!". Наверно, я "ненормальный кодер", но у меня сотни работающих систем, в которых данные передаются именно таким способом, который как вы правильно заметили:
1
|
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
|
|
13.05.2015, 04:40 [ТС] | 10 |
Someone007, спасибо большое, но, не могу открыть в своей студии ( Более поздняя версия А можно кодом?
diadiavova, А можно про этот момент поподробнее? Отлично поставлен вопрос - что неправильно для меня. Я оочень и очень начинающий в этом деле человек. При этом - самоучка, а значит, мне приходится брать интересующую меня информацию из множества разных источников. И часто встает вопрос - как мне, неопытному, определить - где советуют правильно, а где нет? Я захожу на этот форум, набираю в поиске свой вопрос и замечаю, что в 80% случаев в качестве ответа дают ссылку на указанную в ОП-посте тему. И в этой теме я вижу следующее: Возможно, я совершенно напрасно выбрал своим первым языком программирования именно ООПный С#. Я что-то делаю, что-то получается, вижу прогресс, мне интересно - с этим все в порядке. Но, если честно, я не понимаю парадигму ООП. Я, в силу отсутствия опыта, не могу оценить последствия нарушения такого столпа ООП, как инкапсуляция. Возможно, все не так и страшно? Потому что мне значительно проще сейчас взять и изменить модификатор доступа, чем тратить огромное количество времени на поиск информации о том, как это обойти. Если я сгущаю краски и такие решения не в учебном, а в "повседневном" программировании вполне себе допустимы и не вызовут у моих будущих коллег рвоты, прошу Вас, направьте меня. И простите, если что-то в моих сообщениях показалось Вам оскорбительным, это от недостатка опыта, не более
0
|
13.05.2015, 11:24 | 11 | |||||||||||||||
Сообщение было отмечено Katbert как решение
Решение
Ну, а что подробнее? Посмотри любое диалоговое окно. Как там все устроено? Например файл диалог. Там есть свойства файлнэйм, инитиалдиректори и т. д. Ты можешь, создав экземпляр диалога просто присвоить значение инитиалдиректори и у тебя окошко будет открыто как раз в том каталоге, который ты укажешь. Дальше, после запуска окна, откуда ты берешь результат? Опять-таки из свойства файлнэйм. Как все внутри организовано - не имеет ровно никакого значения, ты только имеешь доступ к свойствам, актуальным для поведения этого диалога.
Ну вот взять диалог, редактирующий текст. Там будет текстбокс, назовем его textBox1 и кнопки ОК и Отмена. Код этого окна будет выглядеть так
Я об этом ведь упомянул уже. Ну не надо паблик, установи интернал и переменная будет видна только в пределах сборки. В бейсике такое поведение заложено по умолчанию и ничего страшного не происходит. Мало того, приватное поле не обеспечивает невозможность доступа Достучаться до контрола можно через коллекцию Controls формы, например так
И вообще не надо к рекомендациям относиться как к догмам. Надо понимать для чего нужно выполнять те или иные правила, тогда будешь знать когда от них можно отступить. Пример прилагаю в аттаче, правда написан на vs2013, но если что, вполне можешь создать проект и добавить код оттуда. В принципе должно работать и в более старых версиях.
1
|
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
|
|
13.05.2015, 21:58 [ТС] | 12 |
diadiavova, спасибо огромное, сейчас буду разбираться !
Добавлено через 33 минуты diadiavova, ай красота, все работает, еще и много новых инструментов для себя узнал! Еще раз большое спасибо!
0
|
14.05.2015, 11:39 | 13 | |||||
Katbert, но на самом деле диалоговые окна фреймворка имеют несколько иной вид. Обрати внимание, что ни одно из стандартных окон не является наследником формы. Мало того, ты можешь добавить такое окно в форму из панели интсрументов и настроить его свойства прямо в дизайнере. При этом какой-либо доступ к элементам окна отсутствует в принципе. По большому счету это и есть лучший вариант далогового окна. Вот привожу вариант такого окна. Функционал тот же - редактируется текст. Изменить окошко в дизайнере уже не плучится, но создавал я его именно в нем, просто потом код дизайнера перенес в основной код.
Кликните здесь для просмотра всего текста
Добавь код в проект, собери проект, после чего можно в дизанере добавлять компонент к форме и редактировать его свойства(оно там одно актуально, но это просто пример).
1
|
3 / 1 / 0
Регистрация: 18.09.2014
Сообщений: 77
|
|
15.05.2015, 20:18 [ТС] | 14 |
diadiavova, спасибо еще раз, все протестирую, просто закрутился маленько, дела поднавалились
0
|
15.05.2015, 20:18 | |
15.05.2015, 20:18 | |
Помогаю со студенческими работами здесь
14
Обращение к первой форме из второй Отображение второй формы после отправки первой (и скрытие первой) Обращение из родительской формы к элементам второй формы Открытие (окна) второй формы всегда по центру относительно первой (формы) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |