|
Модераторы: Partizan, gambit |
|
Анальгин |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 14.11.2003 Репутация: нет Всего: нет |
Модератор: В данной теме приводятся конкретные советы и решения по поводу "Как из одной формы обратиться к другой форме". Пожалуйста, в поисках ответа внимательно читайте сообщения в этой теме. Повторно заданные вопросы в разделах .NET будут автоматически перенаправляться в эту тему, с закрытием исходных тем.
Как это на Дельфи. Имеем : Form1 (Unit1.pas) Form2 (Unit2.pas) Чтобы мне из Form1 "видеть" Form2 и все объекты на ней достаточно в Unit1.pas включить строку - uses Unit2; И теперь я могу, например, сделать так : Form2.Edit1.Text:='ля-ля-ля'; Каков аналог в C# ? |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Еслиони в одном проекте - то вообще ничего не надо.
Если же в другом using <Имя проекта>; |
|||
|
||||
Анальгин |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 14.11.2003 Репутация: нет Всего: нет |
у меня один проект и в нем 2 формы.
Например пробую изменить Text у textBox1 перед показом 2й формы Пишу NewForm frm=new NewForm(); NewForm.textBox1.Text="ля-ля-ля"; frm.ShowDialog(); и получаю NewForm.textBox1' is inaccessible due to its protection level |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Так у тебя обявление формы NewForm содержит это поле как protected. Выведи его в public.
|
|||
|
||||
Анальгин |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 14.11.2003 Репутация: нет Всего: нет |
ты имеешь виду это? изменить привате на паблик у техтбокса ?
~~~~~~~~~~ вырезал из листинга второй формы public class NewForm : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; ..... |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Да. А лучше - создать public-свойство только на чтение, в котором возвращать ссылку на textBox1. -------------------- |
|||
|
||||
Анальгин |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 14.11.2003 Репутация: нет Всего: нет |
меняю на public и в ответ :
F:\.....\Form1.cs(304): An object reference is required for the nonstatic field, method, or property '.....NewForm.textBox1' mr.DUDA может конечно лучше, но это не сейчас (сейчас только на 62 странице "полное руководство Visual C#.Net) Как все гиморно в C# по сравнению с Дельфи |
|||
|
||||
AntonSaburov |
|
||||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Так надо так:
|
||||
|
|||||
Анальгин |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 14.11.2003 Репутация: нет Всего: нет |
AntonSaburov огромное спасибо ! все ок.
|
|||
|
||||
stab |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 7 Всего: 48 |
Через пару месяцев будешь наоборот думать ;) Всегда сложно учить новое, но как интересно -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Сергей Плоткин |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 8.8.2004 Репутация: нет Всего: нет |
Поднимаю. Надеюсь в эту тему кто-нибудь еще заглянет...
Начинаю мигрировать C#, тоже с Делфи. Может быть кто-нибудь подскажет решение вышеуказанной задачи (в первом сообщении темы) только с точностью до наоборот: имеются 2 формы. на 1-ой textBox1 и button1 (при нажатии создает экземпляр Form2 и показывает), на второй только button1. Что нужно сделать, чтобы при клике на кнопку button1, находящуюся во 2-ой форме, менялось поле text у объекта textBox1, находящегося на 1-ой (главной) форме? Буду очень благодарен за помощь. |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Передаём ссылку на Form1 в конструктор Form2, в обработчике кнопки на форме2 меняем текст в текстбоксе. Текстбокс по-простому можно либо сделать пабликом, либо доступным через открытое св-во.
-------------------- |
|||
|
||||
Сергей Плоткин |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 8.8.2004 Репутация: нет Всего: нет |
Спасибо огромное. Я наконец разобрался. Хотелось бы заметить, что, на мой взгляд, один из главных подводных камней для людей, мигрирующих с дельфей, такой: VS, в отличие от делфи, не создает автоматически при создании форм экземпляры классов этих форм... + все объекты, переменные, которые мы привыкли создавать в делфи и расчитывать на то, что они будут доступны отовсюду, т.к. по-умолчанию публичны, в C# по-умолчанию защищенные (за точность перевода private не ручаюсь, т.е. доступные только изнутри класса). Может это, конечно, и круто, и отвечает правилам хорошего тона ООП (читал где-то, что общение между разными формами друг с другом напрямую - дурной тон), но мы то к этому настолько привыкли... В общем, все это нужно менять на public, чтобы получить-таки доступ к ним. Это лирическое отступление от новичка для новичков, которые, возможно, набредут на эту тему. Совсем не удивлюсь, если я в чем-то здесь не прав и проявил непонимания основных принципов языка (только азы постигаю), поэтому, если это так, то прошу меня поправить. mr.DUDA - еще раз большое спасибо! |
|||
|
||||
ivashkanet |
|
||||||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Сам просил : VS -- это всего лишь крутой "блокнот". Создает все и вся среда .Net (а именно: JTI-компилятор)
Не понял этой фразы Неужели после объявления класса формы в Дэлфи его экземпляр сразу же начинает существовать? А как к нему обращаться? По имени класса? Тогда для каждой новой формы придется писать свой класс. Так? Тут все по другому (если я конечно прав выше).
Это "чертеж" нового "здания" (формы), а не само "здание". Дальше можно на основании этого "чертежа" возводить сколько угодно новых "зданий".
f, g, k, l --- все РАЗНЫЕ экземпляры форм. Сделанные по общему "чертужу". И чтобы с ними работать тебе всегда нужна ссылка на конкретный экземпляр. Именно поэтому нужно его передавать другой форме. Чтобы она могла работать с полями текущей формы Никто ничего не защищал Просто ты наверное пробовал обратиться к ним через имя класса?
Но ведь form1 --- это чертеж! С ним нельзя работать как с реальным объектом. Чтобы можно было работать с "чертежом" (самим классом, а не его экземпляром) его элемент(ы) должен быть объявлен как static (т.е. общий для всех экземпляров класса) Фроде фисё P.S. В нашем полку прибыло? Добро пожаловать P.P.S. Код писал по памяти, так что мог где-нить накосячить с синтаксисом |
||||||||
|
|||||||||
Сергей Плоткин |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 8.8.2004 Репутация: нет Всего: нет |
Очень хочется вступить в обсуждение, т.к. очень интересно во всем разобраться... Если это все не по теме, то очень прошу модератора не гневаться и перенести оффтопик в отдельную тему.
Да это я знаю (что это крутой блокнот). Но, допустим, я разработчик крутого блокнота "Супер-блокнот". Разве при его разработке я не могу впихнуть в функцию "Создать новый документ" автоматическое вписывание различных строк в документ? Мне же никто не мешает... В делфи все совсем по-другому. Когда моделируешь форму, ты моделируешь именно экземпляр формы. Т.е. даже свойство "Name" у формы (допустим Form1) в дизайн-тайм - это имя не класса, а именно экземпляра класса TForm1. А класс TForm1 (наследник TForm) создает автоматом. К такому-то принципу я и привык. А в VS (C#, .NET - я уже запутался ) надо моделировать именно класс формы и затем создавать ее экземпляр. Нет, это не утомляет и особого труда не занимает, просто ведь "дельфятнику" нужно "дойти" до этого. Насчет чертежей и зданий - я понял. Это ж общий принцип.
Нет, я обращался именно к экземпляру. Я понимаю, что могу свободно редактировать свойства самой формы (экземпляра), например ее заголовок. Зато без танцев с бубном (конечно, уверен со временем мне покажется, что это логично и никак по другому и быть не может) я не могу обратиться к свойствам объекта, лежащего на этой форме.
Спасибо большое за гостеприимство! Это сообщение отредактировал(а) Сергей Плоткин - 13.8.2006, 22:14 |
||||||
|
|||||||
mr.DUDA |
|
||||||||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Всё понятно. Класс называется TForm1, а экземпляр - Form1. Переменная экземпляра формы, наверно, даже где-то объявлена , поэтому можно к ней обращаться из кода. Всё, что заполняется в дизайнере и Properties-ах, автоматом кладётся в исходник и ресурсы, насколько мне помнится из общения с делфями. В WinForms похожий подход, дизайнером тоже создаётся специальный метод InitializeComponent, в который кладётся всё, что мы дизайним и настраиваем в Properties. Вот только экземпляр типа Form1 не создаётся автоматически - мы должны позаботиться об этом сами, т.к. изначально есть возможность создать много экземпляров одного класса (TForm1). К примеру, главная форма приложения создаётся в методе Main():
Конечно, дельфисту поначалу это может показаться непривычным, но со временем привычки изменятся, и всё станет на свои места . З.Ы. можно в принципе замутить статик-переменную с экземпляром формы, заполнять её в конструкторе формы, и тогда вполне можно обратиться к формам так (при условии, что указанная форма существует в данный момент времени):
или так:
НО однозначно более правильным способом остаётся передача экземпляра одной формы в конструктор другой. -------------------- |
||||||||
|
|||||||||
3me1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.8.2006 Где: Киев, Украина Репутация: нет Всего: нет |
Все предельно просто.
создаем в классе формы указатель на "родительскую" форму public class ChildForm { private ParentForm parentForm; ///ctor public child(ParentForm link) { this.parentForm=link; } ................. } вот и все... теперь создаем э.ф. ... { ChildForm childForm=new ChildForm(this); childForm.Show(); } и соответственно обращаемся к родителю просто parentForm. ....; |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
3me1, это то о чём неоднократно говорилось:
-------------------- |
|||
|
||||
kobra |
|
|||
Опытный Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: нет Всего: 9 |
в этои теме несколько раз прозвучало что компоненти входящие в состав формы нужно осавлять приватними, а для работы с ними писать своии паблик методы. честно говоря я в первые такое слышу. может обясните почему так? если по мне, ето не совсем правилно, из однои формы часто управляю елементами на другои форме. и зачем писать при етом собственные методы, когда ети методы уже есть? |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
kobra, есть принцип ООП -- инкапсуляция называется. Звучит он примерно так: Никакие данные внутри класса изменять нельзя. Можно только попросить класс изменить что-то, и если эти изменения согласуются с внутренней политикой класса, то он их сделает. Определение, конечно, бестолковое, но суть проясняет Например тебе в классе формы хочется, чтобы в ее заголовке отображалось содержимое некоторого текстБокса. Если теперь напрямую поменять значение текстбокса, то не факт что форма его подхватит. Конечно можно подписаться на событие смены текста в текстбоксе. Но это только пример |
|||
|
||||
kobra |
|
|||
Опытный Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: нет Всего: 9 |
на счет инкапсулации все понятно. и пример твои вполне коректен. так как загаловок формы это своиство класа формы.
я спрашиваю про то что менять например текст текстбокса расположенного на форме. в подобнои теме недавно было, что законы ООП и инкапсулация требуют создать метод класса формы. но по моему текстбокс не входит в клас формы, он ползуится этим класом как контеинером. и исходя из этого нужно работать с ним напримую а не через клас формы (правда при этом приходится указывать какои егземпляр формы содержит этот текстбокс, но кажется эта другая песня). |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Вот именно (кстати свойство --- это тот же метод, только синтаксис другой). Когда ты кидаешь на форму текстБокс. Ты получаешь новый класс -- твоя форма, а не отдельно класс и отдельно форму. И поэтому лучше обращаться ко всему классу. Хотя удобнее к его компоненту. Хорошо когда ты сам писал класс формы и знаешь его внутреннюю кухню. А если нет. Даже на простом примере (см. предыдущий пост) видно, что лучше такого не допускать. Но с другой стороны. Принципы ООП, ИМХО, жестко относятся только к повторно используемому коду. Если ты точно знаешь, что твоим классом никто не воспользуется (например кому нужна форма с конретным положением конкретных элементов на ней), то на ООП можно забить |
|||
|
||||
kobra |
|
||||
Опытный Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: нет Всего: 9 |
|
||||
|
|||||
3me1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.8.2006 Где: Киев, Украина Репутация: нет Всего: нет |
сорри я завтыкал |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
-------------------- |
|||
|
||||
Colloseum |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 71 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
При открытии понятно.
А наоборот.. При закрытии окна нужно передать данные(из textBox'a) в другую форму. |
|||
|
||||
marcusmae |
|
||||||||
stravaganza Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Colloseum, классическое решение - то, что называется callback, обратный вызов, или делегат в C#. Можно, например, создать класс
Далее, в форме, которая должна получать текст из диалога, инициализировать слушателя события callbackEvent :
А в диалоге при его закрытии создавать событие :
Таким образом, при закрытии диалога произойдёт событие, аргумент которого - текст из TextBox'a. Другая форма зарегестрировалась на прослушку этого события, поэтому вызовется обработчик getText, в параметре которого и будет долгожданый текст. Показанная конструкция - наиболее общая : делегат и его тип находятся в отдельном классе. Конечно, всегда лучше, если они находятся в одном из использующих классов. Всё зависит от того, как ты хочешь организовать программу. Это сообщение отредактировал(а) marcusmae - 2.9.2006, 20:36 -------------------- ἀπὸ μηχανῆς θεός |
||||||||
|
|||||||||
reloni |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: нет Всего: 4 |
Есть, на мой взгляд, более простое решение.
Есть две формы: MainForm - главная форма, и Form1 - форма, из которой нужно вытащить данные. Кидаем на вторую форму текст-бокс и кнопку. Пишем своиство:
Обработчик нажатия на кнопку:
Ну и на главной форме кнопка, по нажатию на которую создается Form1:
Смотрим, что за DialogResult нам вернули, и если это ОК, то в мессаджбоксе видим то, что было введено в текстбокс в дочерней форме. Это сообщение отредактировал(а) reloni - 2.9.2006, 22:18 |
||||||
|
|||||||
marcusmae |
|
|||
stravaganza Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Если уж на то пошло, DialogResult тут, по-моему, мало нужен. Достаточно будет создать public - поле/свойство с текстом в форме и отправлять туда текст при закрытии диалога.
Думаю, ничто не мешает вообще переопределить в наследуемом классе DialogResult, сделать его string и возвращать текст. Да вот только, всё это будет работать только когда возвращать нужно туда же, откуда диалог вызвали... В любом случае, речь идёт о степени корявости кода программы, которую разработчики могут увеличивать до тех пор, пока программа не начнёт казаться интеллектуальной по части разнообразия возникающих ошибок. Общепринятый подход к созданию корявости - это, всё-таки, делегаты Это сообщение отредактировал(а) marcusmae - 3.9.2006, 01:13 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
reloni |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: нет Всего: 4 |
marcusmae, это если нужно выполнять какие-то действия если результ ОК, а другие, если он Cancel допустим. А про делегаты спасибо, не знал
|
|||
|
||||
reg24r |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Понять что в этом топике описано и повторить что здесь написано может только тот кто знает и без того как это все делать.
Прочитал топик уже раз 50 в поисках истины. Попробовал что-то повторить. Увы... Уважаемые программисты ! Может кто-нибудь показать на примере как при закрытии кнопкой второй формы передать значение label.Text формы2 в label.Text формы1 Извиняюсь за тупость. (не отсылайте к теории и книгам, там о таком к сожалению ничего не написано, по крайней мере для тупых) |
|||
|
||||
ivashkanet |
|
||||||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
reg24r, в твоем случае есть два варианта:
1) Показать вторую форму с помощью ShowDialog(), тогда первая форма будет ждать пока закроется вторая, а потом нужные данные "слизать" с закрытого, но еще живого экземпляра второй формы.
2) Либо
P.S. Модераторы: предлагаю очистить эту тему от всего ненужного мусора P.P.S. Весь код был написан тут же, так что его скорее всего придеться "доработать напильником" на предмет синтаксических ошибок |
||||||||
|
|||||||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
ivashkanet, "мусор" останется, мало ли он кому понадобится ... А пример твой имхо более чем понятен. Или если что, спрашивайте, reg24r, мы ответим !
-------------------- |
|||
|
||||
reg24r |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Оба примера слава богу работают.
Огромное спасибо за помощь. Преодолена еще одна ступень в ООП. Вопрос по этому коду
Чем отличается Form1 parentForm; от Form1 parentForm = new Form1(); Это сообщение отредактировал(а) reg24r - 10.9.2006, 16:48 |
|||
|
||||
Exception |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 1 Всего: 186 |
Первый вариант - ты объявляешь переменную. Второй - ты её объявляешь и сразу создаёшь экземпляр, с которым можно работать. В первом варианте в переменной будет хранится null, а во втором - экземпляр класса Form1.
|
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Добавлю еще, что Form1 parentForm = new Form1(); создает совершенно новый экземпляр класса Form1 (читать выше про чертежи и здания). И это будет совсем другая новая форма (брат-близнец главной формы).
Поэтому приходиться передавать ссылку на форму явно Form2 f2 = new Form2(this) |
|||
|
||||
Lеstat |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 76 Регистрация: 28.12.2005 Где: Москва Репутация: нет Всего: нет |
Можно тоже вопросик на эту тему...
прочитал и тему, и форум полистал не нашел ответа У меня есть главная форма Form1 и еще один класс в отдельном файле в классе Form1 пишу такую штуку
эта функция вызывается после нескольких других функций, в которых я подключался к БД, настраивал ее и тд эту функцию мне необходимо выззвать из другого класса... когда я пишу в другом классе
и у меня получается бред... мне нужно чтобы функция выполнилась так, как-будто я ее в самом же Form1 и вызвал! раньше я выкручивался через
Хочу вот узнать как умные люди пишут такие процедуры... Это сообщение отредактировал(а) Lеstat - 16.9.2006, 18:06 |
||||||
|
|||||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Lеstat, надобыло внимательнее читать топик
В твоем случае подходит пункт 2 (передача ссылки через конструктор)
Интересно почему так не покатило? Если ты хочешь из Form2 вызвать метод InstallintoDB первой формы, то пишешь
|
||||
|
|||||
vitovt |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.10.2006 Репутация: нет Всего: нет |
Немного вернусь к первонанальной теме. На форуме были только советы, как обратиться к форме-родителю (поправьте, если что-то пропустил). А что, если в проекте форм эдак 10-15 ? Я предлагаю следующий метод, который, возможно, будет легко понять:
Итак, сначала сделаем static класс, в котором будем хранить список всех форм проекта. Примерно так:
Обратите внимание, что мы просто объявляем объекты, не выделяя память, т.е. по сути мы объявляем указатели на формы, которые в момент запуска равны null Сейчас внесём небольшие изменения в конструкторы каждой из форм, и вместо
напишем
И так для каждой. Иными словами, после создания формы мы из любой другой можем к ней обратиться: ApplicationFormList .AdminForm.Show(); Можно немного улучшить и проверять, создана ли форма, если вы не делаете этого при старте приложения:
Как видим, обращение к формам стало очень похоже на Delphi, только перед именем формы пишем имя того static - класса, в котором у нас храниться список форм. За сим дозвольте откланяться P.S. Буду только рад замечаниям. Это сообщение отредактировал(а) vitovt - 3.10.2006, 22:42 |
||||||||
|
|||||||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
А их вроде как и нету Кроме как использования вместо поля --- пропетя, у которого на чтение public, а на запись internal либо
А это лучше всего обернуть в пропертю:
|
||||
|
|||||
lioness |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 27.7.2006 Репутация: нет Всего: нет |
А если объект наследуется (у меня ArrayList, например), то у меня не получается так лихо напрямую к нему обратиться:
Т.е. у объекта формы должен стоять public? А protected - не пойдет? |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
protected пойдёт, если обращаемся к полю из наследника -------------------- |
|||
|
||||
xsb3 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Люди а http://xsb3.ifolder.ru/544137 данный проект переделать можете и выложить переделанный чтоб все на практике видели как что к чему.
|
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
чтоб все на практике видели как что к чему. Чтобы ты его забрал результат, а больше ведь тебе ничего не надо Примеров, некоторые очень даже хороши, здесь было достаточно |
|||
|
||||
VisualProgrammerNET |
|
||||
Почётный халявщик Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Достало просто уже писать диздок... Решил хоть чё-нить спрограммить.
xsb3, вот те коды обеих форм. Форма 1:
Форма 2:
Да, и обработчик не забудь убрать с listView1_SelectedIndexChanged Это сообщение отредактировал(а) VisualProgrammerNET - 6.12.2006, 20:24 -------------------- 3 ГОДА НА |
||||
|
|||||
Ламо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.12.2006 Репутация: нет Всего: нет |
100%!!!! Это сообщение отредактировал(а) Дрон - 27.12.2006, 16:37 |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Ламо, это ты к чему?
Одноразовые способы у нас не в ходу А все потому, что в твоем коде frm это локальная переменная, которая пропадет при выходе из метода. Следовательно ссылка на форму пропадет тоже. А без ссылки на форму с ней уже ничего сделать не получиться Это сообщение отредактировал(а) ivashkanet - 27.12.2006, 17:54 |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Ламо, ShowDialog работает до тех пор пока форма не закрыта. То есть, твой
выполнится уже после закрытия формы !!! -------------------- |
|||
|
||||
McSlash |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.1.2007 Где: Мурманск Репутация: нет Всего: нет |
Описал формы как показал VisualProgrammerNET, но не могу придумать
как добраться до текст бокса на второй форме. Сразу попробовал так
в результате ошибка (390): 'WinApp.Form2.textBox1' is inaccessible due to its protection level Перевести могу но, как тогда правильно обратиться к наполнению второй формы? В смысле не к textBox'у а вообще к любому элементу?
На обеих формах стер все, что посчитал лишним. Может переусердствовал? |
||||||
|
|||||||
reloni |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: нет Всего: 4 |
Это сообщение означает, что текстбокс на второй форме объявлен как protected или private, поэтому ты и не можешь но него добраться (инкапсуляция). Есть два пути:
Или поставить текстбоксу public и тогда можно с ним делать все что душе угодно (в том числе и будет работать код выше). Или в форме номер два сделать специальное свойство:
И тогда можно будет устанавливать значение уже через него:
|
||||
|
|||||
McSlash |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 7.1.2007 Где: Мурманск Репутация: нет Всего: нет |
Спасибо! Сам думал работать через процедуру, но пока не успел, да и решение вырисовывалось кривенькое...
А public - это, по моему, не серьезно. Не зря же private автоматом прописывается. Вроде как для защиты программы от внешнего управления в скомпилированной программе... Это только предположение естесвенно |
|||
|
||||
Berserk |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 104 Регистрация: 14.12.2006 Где: Столица Донбасса - Горловка Репутация: нет Всего: 2 |
Есть вторая форма на которой расположен прогрессбар. Есть бекгроундворкер. Для второй формы я создаю
Как мне вызывать его из первой формы в
--------------------
|
||||
|
|||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Сделать его пабликом (в окне Properties в дизайнере), тогда если есть ссылка на форму, можно будет обратиться просто через точку.
-------------------- |
|||
|
||||
Evgenik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.2.2007 Репутация: нет Всего: нет |
Профи С#.NET помогите реализовать простую задачу. Необходимо, чтоб при закрытии формы выдавалсь сообщении, подтверждающее выход. Тобишь сообщении с двумя кнопками (ОК,Cancel). Соответственно при нажатии ОК- выход, Cancel - всё возвратилось на круги своя...
Извините если не туда запостил. |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Evgenik, вынеси в отдельную тему в раздел "Разработка Windows Forms", там и отвечу
-------------------- |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
||||
|
||||
Evgenik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.2.2007 Репутация: нет Всего: нет |
Спасибо, разобрался...
P.S. Спасибо, что просто не послали восвояси |
|||
|
||||
Legolas |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
Скажите, плз. Как заставить при активация одной формы предыдущую закрываться?
|
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Legolas, ИМХО, тут без внешнего менеджера форм не обойтись.
|
|||
|
||||
Legolas |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
Поподробнее пожалуйста.
|
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Не, я глюканул Можно:
|
|||
|
||||
Legolas |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
Вроде работает, но...
У меня есть главная форма, кликая по кнопке открывается следующая, затем мне нужно кликая по кнопке в следущей вернуться в главную. Но, в твоем примере, если кликнуть по кнопке во второй форме, то главная продублируется, а не выйдет на первый план, то есть получается, что появляются две главные формы одна под другой.... Как избежать этого? Добавлено через 14 минут и 48 секунд Всё, разобрался, спасибо!) |
|||
|
||||
Legolas |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
Пытаюсь передать значение строки из одной формы в другую.
Компилятор выдает ошибку, что str == null; Ставлю breakpoint и вижу, что при работе в первой форме, значение fio="Фамилия", но при открытии второй формы это значение обнуляется (?) и str присваивается null. Подскажите как этого избежать. Спасибо. |
|||
|
||||
Exception |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 1 Всего: 186 |
Полностью код покажи.
Ты, наверное, создаёшь первую форму заново, а тебе надо считывать значение из уже существующего экземпляра . |
|||
|
||||
Legolas |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
У меня две формы: Form1 и Form2. В Form1 есть richtextbox1. Я заношу инфу в richtextbox1, а затем эту инфу мне нужно передать в Form2 строку.
Form1:
Form2:
При breakpoints в первой форме видно, что string fio = "Иванов", но при Debug'е второй формы strinf fio == null (?) Это сообщение отредактировал(а) Legolas - 1.6.2007, 19:20 |
||||
|
|||||
Exception |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 1 Всего: 186 |
А ты в принципе осознаёшь то, что делаешь?
заново создаёт экземпляр формы (можешь бедиться, вызвав f1.Show()). Естественно, fio пусто. Во-вторых, тебе нужно сохранить текст в поле, а ты сохраняешь его в переменной: (надо this.str) Правильно передать в конструкторе при создании Form2 ссылку на экземпляр Form1 и обращаться к нему. |
|||
|
||||
Legolas |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
НЕ очень понимаю как это сделать... |
|||
|
||||
Vasja_Pupkin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 1.6.2007 Репутация: нет Всего: нет |
Народ, такой вопрос по си шарпу: как обратиться к переменной из другого класса, т.е. мы имеем 2 формы на первой текст бох и кнопка, на второй текст бокс, при нажатии на кнопку на первой форме надо чтоб текст в текст боксе на 1 форме появлялся в текст боксе на 2 форме.
|
|||
|
||||
W1zArD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 285 Регистрация: 29.1.2006 Репутация: нет Всего: 3 |
>как обратиться к переменной из другого класса
поставить перед переменной ключ. слово public |
|||
|
||||
WinNet |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 56 Регистрация: 4.3.2007 Где: г.Москва Репутация: нет Всего: нет |
К стати в mdi эти примеры не катят?! или я что то не так делаю...
Вот код: Form3
Form1 // MDI контейнер!
|
||||
|
|||||
QryStaL |
|
|||
Intellectual feast Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
-------------------- I don't need a reason being who I am... |
|||
|
||||
WinNet |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 56 Регистрация: 4.3.2007 Где: г.Москва Репутация: нет Всего: нет |
СПАСИБО!
Все заработало с малениькой поправочкой:
|
|||
|
||||
ToMaloi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 23.7.2007 Репутация: нет Всего: нет |
Простите за повторения.Есть главная форма Form1.Считываем с нее textbox и открываем Form2, в Form2 обрабатываем textbox, а главную закрываем....закрывается и Form2???
Это в главной форме: Form2 f2 = new Form2(); f2.Show(); ...... Close(); Что же мне написать во второй чтобы она не закрылась и достать во второй textbox из главной Башкой подумал... все хорошо!!! Это сообщение отредактировал(а) ToMaloi - 31.8.2007, 16:05 |
|||
|
||||
klet2007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Имеются 2 формы. В них button1,button2 и textBox1,textBox2 соответственно. По клику на кнопку button1 рткрывается форма2.
Как быть, если нужно чтоба текст из textBox2 второй формы попадал в открытую уже форму1? |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
klet2007, перечитай тему
|
|||
|
||||
Dark_Falcon |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 11.7.2007 Репутация: нет Всего: нет |
В Form2 пишем
Обработчик нажатия на кнопку 2 в Form2
Обработчик нажатия на кнопку 1 в Form1
|
||||||||
|
|||||||||
Sergey_P |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 6.9.2007 Репутация: нет Всего: нет |
А как сделать, чтобы при нажатии кнопки во второй форме, данные передавались бы в первую, но при этом не закрывалась вторая форма? Я попробовал так:
но при компиляции в строке "public child(ParentForm link)" выдается ошибка Class, struct or integface method must have a return type Дальше я посмотрел пример
И изменил таким образом В форме 1 текст такой
а в форме 2 такой
Но при компиляции выдается ошибка parentForm.textBox1.Text = this.textBox1.Text; .... .Form1.textBox1.Text is inaccessible due to its protection level Добавлено через 6 минут и 51 секунду кстати, а если надо перемещать большой объем данных из потомка в родителя, как сделать, чтобы такая операция не тормозила? |
||||||||||
|
|||||||||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Если это конструктор, то он должен называться ChildForm, а если нет, то должен быть тип (void например)
Перевод: .... .Form1.textBox1.Text недоступен ввиду его "уровня доступа" Пояснение: Скорее всего textBox1 имеет модификатор private. |
||||
|
|||||
Sergey_P |
|
||||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 6.9.2007 Репутация: нет Всего: нет |
таак, понятно
исправил на public у кнопки, заработало ...но вторая форма появляется вообще пустой вот код в первой форме (там в дизайнере добавил текстовое поле и кнопку)
на вторую форму тоже добавил кнопку 2, и текстовое поле 2
неделю назад программил на дельфи и в глаза не видел C#, а сейчас срочно надо C# !!!!! помогите Добавлено через 4 минуты и 34 секунды гыыыыы, понял я забыл InitializeComponent(); |
||||
|
|||||
Sergey_P |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 6.9.2007 Репутация: нет Всего: нет |
к спецам есть еще вопрос - а можно родительской форме передать событие?
если да, как это правильнее всего сделать? |
|||
|
||||
Deja_Vu |
|
||||||||
Шустрый Профиль Группа: Участник Сообщений: 88 Регистрация: 15.6.2007 Где: Казань Репутация: нет Всего: 2 |
Лично я думаю, что форма, этопржде всего инструмент ввода/ввывода информации, а саму информацию нужно хранить в другом месте.
Поэтому использую родительский класс(свой - DataCenter), который и работает со всеми формами и т.д. DataCenter.cs
Program.cs
Form1.cs
AboutBox1.cs
Конечно, я не профи в C#.NET поэтому буду рад обсуждению такого подхода. Добавлено через 2 минуты и 20 секунд to Sergey_P имхо - мой подход может тебе очень помочь, т.к. с помощью него можно получать доступ к чему угодно... |
||||||||
|
|||||||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Deja_Vu, нормуль ;-)
Концепция хороша, реализация тоже неплоха. Я что-то в этом духе использую сам. P.S. Только вот это все сложно для тех, кто не знает как "Как обратиться к объекту другой формы".... |
|||
|
||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Хм, очень грустно конечно. Но перечитав топик 4 раза, так и не допонял, какой способ мне нужно использовать. Тут большинство пишут про возвращение значения из формы2 в форму1. А если просто надо передать значение из формы1 в форму2. Т.е. у меня есть форма1 с textBox и кнопка "Далее". При нажатии на кнопку "далее" форма1 закрывается(или скрывается), а значение textBoxa передаётся в форму2, где с ним(со значением) происходят необходимые вычисления.
|
|||
|
||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
|
||||
|
|||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Всё, спасибо разобрался.
А ещё такой вопрос. Т.к. первая форма у меня главная, то при открытии второй, ественно, закрыть первую форму я не могу, приходится её скрывать методом ".Hide()". А при закрытии второй, первая остаётся висеть в памяти. Как же мне при закрытии второй закрыть и первую? Это сообщение отредактировал(а) alver - 21.11.2007, 01:08 |
|||
|
||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Из наиболее простых решений я бы предложил следующее:
|
||||
|
|||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Спасибо. Этот способ я понял. Но уж какой то он больно элементарный. Проти кончено за напористость). Просто хочу ПОНЯТЬ, как именно закрыть первую форму непосредтвенно из второй. Т.е. нужно видеть поля первой формы из второй. Прочитав топик, подозреваю, что нужно передать через конструктор втрой ссылку на первую?? И уже так с ней работать. Но чего то не выходит(
Это сообщение отредактировал(а) alver - 21.11.2007, 11:10 |
|||
|
||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Не думаю, что это недостаток ;-)
Да, но раз у тебя есть метод инициалайз, то лучше через него (Я вообще сторонник того, чтобы конструктор делал как можно меньше --- только создавал нужный объект и все). А имея ссылку на первую форму можно делать с ней все что угодно, в частности закрыть ее:
Надеюсь первая форма не главная форма приложения? В этом случае ее нельзя закрыть не закрыв при этом приложения... |
||||
|
|||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Щас объясню, собственно, в чём загвоздка. Представь себе любой пошаговый мастер, т.е. есть первая форма, нажимаешь на кнопку "далее", появляется вторая форма, и т.д. У меня таких формы подряд четыре. Первая информационная, вторая для ввода данных, третья для вывода формул, четвёртая для вычислений. Т.е. это и есть пошаговый мастер. Собственно хотелось бы, чтобы как в настоящим мастере можно было по кнопке "назад" откатываться на одну форму назад. Ну и передача значений между формами, в чём собственно ты мне уже помог.
|
|||
|
||||
1stain |
|
|||
Опытный Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 3 Всего: 40 |
alver, одна форма визарда, на ней несколько панелей, каждая для своего шага. В каждый момент Visible = true только та панель, которая соответствует текущему шагу. Вся информация аккумулируется в форме визарда.
-------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
В случае пошаговых менеджеров я бы предложил набор панелей (представляющих собой шаги), которые скрываются и показываются по мере надобности на одной и той же форме (это просто идея, я сам такого не делал, но если бы делал, то делал бы именно так).
|
|||
|
||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Я думал так, но как то некрасиво получилось. Элементов много, и всё в кучу. А как вообще правильно делать? |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
||||
|
||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Юзер контрол - а это чего? Точнее как?) Это сообщение отредактировал(а) alver - 21.11.2007, 12:11 |
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
System.Windows.Forms.UserControl
P.S. Погуглил немножко. Многие советуют делать многостраничный диалог именно панелями. |
|||
|
||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Хм, ладно. Спасибо, будем программить через одну форму)
|
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
alver, не нужно кидаться в омут с головой. Лучше сначала немножко подумать.
У тебя уже есть вариант с четырьмя формами? Если да, то можно обойтись малой кровью создав небольшой класс который будет управлять формами диалога. Например что-то подобное:
P.S. Просьба модераторам вынести это обсуждение в отдельную тему. Название "Создание многостраничного диалога". Добавлено через 5 минут и 40 секунд Товарищ, кот отметил мой первый пост на странице минусом --- не хотите ли пояснить свою позицию? Это сообщение отредактировал(а) ivashkanet - 21.11.2007, 12:41 |
|||
|
||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Да, четыре формы уже есть. Я в принципе уже и без класса сделал вроде, но время есть, поэтому щас попытаюь через класс ещё сделать, дабы чему то научиться) |
|||
|
||||
QryStaL |
|
|||
Intellectual feast Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
Я бы использовал для пошагового визарда TabControl со скрытыми закладками, тогда между ними просто перемещаться программно, и вся логика внутри одной формы.
ivashkanet, посыпаю голову пеплом, просто случайно мышь съехала. Если бы знал как, удалил бы... -------------------- I don't need a reason being who I am... |
|||
|
||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
ИМХО, разница небольшая Панели, юзерконтролы, табконтрол.... суть примерно одна.
Да фигня, это я так ;-) |
||||
|
|||||
alver |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
QryStaL: пасиба, учту)
Тока, чего то я не нашёл visible для вкладок. Там другое свойство за это отвечает? Это сообщение отредактировал(а) alver - 21.11.2007, 18:01 |
|||
|
||||
VisualProgrammerNET |
|
|||
Почётный халявщик Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Да, кстати с табами получается очень грамотный GUI. Согласен на все 100%. А чтобы скрыть вкладки я обычно сверху табконтрола поверх этих вкладок леплю label, в который можно например засунуть название текущего табпэйджа =))))
-------------------- 3 ГОДА НА |
|||
|
||||
QryStaL |
|
|||
Intellectual feast Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
VisualProgrammerNET, я тоже так делал Более изящного решения не нашел, но оно работает =)
-------------------- I don't need a reason being who I am... |
|||
|
||||
AET |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 171 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
подскажите как можн чтобы веденое слово в textBox1 из формы1 вышел в загаловке формы2 зарание блогодарен
|
|||
|
||||
thomas |
|
|||
Доцент... почти Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
AET,
присвой значению свойства text второй формы(Form2.Text) значение свойства text текстбокса(TextBox1.Text) первой формы. И будет тебе счастье. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
AET |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 171 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
чтото не получается
|
|||
|
||||
thomas |
|
|||
Доцент... почти Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
AET,
Код в студию. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
AET |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 171 Регистрация: 13.3.2007 Репутация: нет Всего: нет |
вот форма3
а вот форма 2 [code] public partial class Form2 : Form { public Form2() { InitializeComponent(); this.TopMost = true; } private void button1_Click(object sender, EventArgs e) { { Form3 f = new Form3(); f.Show(); this.Close(); } } private void button2_Click(object sender, EventArgs e) { Close(); } } [\code] |
|||
|
||||
Real |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 507 Регистрация: 9.11.2007 Репутация: 0 Всего: -1 |
Чем отличаеться?
|
||||||||
|
|||||||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Real, ShowDialog отличается от Show тем что в первом случае форма показывается модально, т.е. блокирует другие формы приложения до тех пор пока эту форму не закроют. Остальные случаи - создание либо экземпляра своей формы (ExtendedParams) либо формы-"болванки" (Form), на которой ничего нет.
-------------------- |
|||
|
||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Частично ответы по теме даны тут: http://forum.vingrad.ru/index.php?show_typ...howtopic=188004
-------------------- |
|||
|
||||
tht |
|
||||||||
Шустрый Профиль Группа: Участник Сообщений: 118 Регистрация: 10.5.2006 Репутация: 1 Всего: 1 |
отвечу сразу на первый вопрос темы.
есть Form1.cs, у нее есть Form1.Designer.cs в этом файле в конце есть список компонентов и контролов которые вставлены в форму. типа так
если добавляете к проекту новую форму Form2, то у нее тоже есть Form2.Designer.cs в конце которой тоже есть список объявлений типа
что бы был доступ к переменным(контролам) второй формы(Form2) нужно в этой второй форме (Form2.Designer.cs)обьявить переменные след. образом
а из первой формы вызывать их след. образом: в форме Form1.cs допустим при нажатии на кнопку в этой форме
тоже самое ответил mr.DUDA только в сокращенном варианте. а я разъяснил более подробно. Это сообщение отредактировал(а) tht - 23.12.2007, 11:15 |
||||||||
|
|||||||||
kirillga |
|
||||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
Помогите разобраться
У меня есть например 1 форма Form1 в ней объявлена переменная
из неё вызываю Form2
Как теперь открыть Form1 не создовая новой форы тобишь чтобы все осталось как вводил во всех полях и передать в него значение prov???? можно конечно через Form1.Show(); но если форм 5 например то все значения таскать за собой надо будет. |
||||
|
|||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
совсем это не похоже на: -------------------- |
|||
|
||||
Real |
|
|||
Опытный Профиль Группа: Участник Сообщений: 507 Регистрация: 9.11.2007 Репутация: 0 Всего: -1 |
2kirillga
|
|||
|
||||
cASSAndra |
|
||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 29.11.2007 Репутация: нет Всего: нет |
слушайте, тут делфисту без бутылки не обойтись . у меня есть форма, а в ней MDI окна. мне грубо говоря надо, чтобы на главной форме в ComboBox отражалось, в каком MDI окне я нахожусь.
не помогает. пишет
что делать то? Хелп, плиз |
||||
|
|||||
Qhermit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.3.2008 Репутация: нет Всего: нет |
Помогите ! У меня такая проблема: в методе класса ImageProcClass.cs делаются преобзарования матрицы изображения ну эт неважно, мне нужно что бы из этого метода одна временая переменая записывалась на form1 в textbox1 как это сделать?
|
|||
|
||||
mr.DUDA |
|
||||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Проще всего так:
У текстбокса в свойствах выставить "Modifiers = Public". -------------------- |
||||
|
|||||
Qhermit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.3.2008 Репутация: нет Всего: нет |
mr.DUDA, спасибо большое
|
|||
|
||||
Qhermit |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.3.2008 Репутация: нет Всего: нет |
mr.DUDA, а не подскажешь как сделать что бы при открытии главной формы ISO (запуска программы) данные грузились в textBox-ы неактивной формы form2
вот код где пишется в textBox-ы главной формы ISO при загрузки
Пробывал писать вместо textBox1.Text = sr.ReadLine(); textBox1.Text = sr.ReadLine(); так
|
||||
|
|||||
mr.DUDA |
|
|||
3D-маньяк Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Это создаст новую форму form2. Если хочется создать и показать новую форму, нужно после "new" вызвать form2.Show() -------------------- |
|||
|
||||
Qhermit |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 27.3.2008 Репутация: нет Всего: нет |
мне нужно что бы в форму form2 из файла записывались значения в textbox-ы которые потом в других классах я использую а если так я делаю и потом просматриваю form2 то в ней значения которые я изначально выставил а не те которые в файле поэтому вот это ничего не делает или хз
|
||||
|
|||||
PaZ1T1V |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 169 Регистрация: 26.2.2008 Где: Багдад ) Репутация: нет Всего: нет |
Народ, я правильно пишу или нет ??? по4ему то ни4его не пашет (((
и
по4ему при нажатии кнопки зна4ения переменных меняются а в родительскую форму не передаются ?? поправил так, пришлось открыть richTextBox, все передается, то 4то мне надо дажже работает, но работает после того как я закрою форм2, мне етого не надо помогите плиз
Это сообщение отредактировал(а) PaZ1T1V - 9.4.2008, 15:05 --------------------
[size=8]Atention please!!![/size] [size=6]Кривые руки[/size] |
||||||
|
|||||||
ProgrammingLife |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 133 Регистрация: 19.1.2008 Где: ЧИРЧИКАГО (UZ) Репутация: нет Всего: нет |
Всем Салют! Люди не мучайтесь делайте Форму статик и все ништяк вот кодик
ФОРМЕ 2
КОМУ ПОМОГ ? ПРИШЛИТЕ ПИСЬМА МНЕ ИНТЕРЕСНО Я СО СТАТИКОМ НЕ ПОЛЬЗОВАЛСЯ ОБЪЯСНИТЕ СКИНТЕ КОДИК С СОУЧАСТИЕМ КЛЮЧЕВОГО СЛОВА static |
||||
|
|||||
Solely |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 3.4.2008 Репутация: нет Всего: нет |
mr.DUDA - thanks!!
|
|||
|
||||
ivashkanet |
|
|||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
ProgrammingLife, лучше научится правлиьно решать вопросы, а не просто решать.
Если уж хочешь статик, то лучше использовать Синглтон |
|||
|
||||
botusai |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
2 Paz1t1v
Попробуй так: напиши на главной форме метод (DoWork), который делает то, что у тебя сейчас делает твоя кнопка findBtn на findForm, а на событии Click этой кнопки вызывай этот новый метод (form1.DoWork()) |
|||
|
||||
ProgrammingLife |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 133 Регистрация: 19.1.2008 Где: ЧИРЧИКАГО (UZ) Репутация: нет Всего: нет |
на словах не "флейвумуют" давай ка кодик Заранее сапсибо!!
|
|||
|
||||
botusai |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Вот код
Это сообщение отредактировал(а) botusai - 19.4.2008, 07:28 |
|||
|
||||
CheFF |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
Тоже вопрос про доступ к форме и контролам.
Делаю класс, который должен работать с контролами на форме. По началу, когда он работал с одним контролом, я решил просто передать этот контрол через параметр в конструкторе в класс и уже оттуда с ним работать. Все бы хорошо, да вот только потом пришлось еще один контрол добавить, а за ним еще один и еще... Может есть способ поэлегантнее? Пробовал добавить через конструктор форму... но в классе через форму не удалось выйти на контролы на ней... Как же работать из класса с контролами на форме? |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
потому что контролы на форме private задай internal или public (в зидайнере форм) свойству Modifiers тех контролов, доступ к которым ты хочешь получить из-вне. А на счет "поэлегантнее" - разных подходов сотни. Все зависит от задачи. Лично мне вообще на приходится прибегать к таким способам, типа "доступ к контролам формы из какого-то класса". Может у тебя и уникальная задача, но уверен, что решить ее можно правильно. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
CheFF |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
-Mikle-, хм... это я пробовал, вот только не знаю, как работать то в классе.
Создаю поле для указателя на форму:
Через конструктор его туда пихаю. Теперь, допустим, я могу сменить заголовок через
Насчет "элегантности" - пишу подобие броузера. На главной форме лежит таб контрол, в который я добавляю вместо TabPage вкладок, вкладки моего класса, наследованные от табпейджа, который содержит в себе компонент WebBrowser. Так вот, у этого броузера есть несколько событий, которые описываются в этом классе. Например, что бы он урл писал в заголовке, отображал процесс загрузки страницы в статус баре etc. Другого способа, как передавать через конструктор ему все эти контролы, а внутри уже менять их, я не нашел. |
||||||
|
|||||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
А зачем ты: 1. вообще создаешь экземпляр вместо того, чтоб передавать this? 2. создаешь экземпляр базового класса для форм(в котором конечно же нет твоих контролов), вместо того чтоб создавать экземпляр твоей главной формы? На заметку: метод FindForm() контрола (в том числе табпейджа) возвращает ссылку на форму, в которой находится контрол. Элегантность: Один из принципов, которого надо придерживаться создавая архитектуру своего приложения, это разделение задач по иерархии. То есть каждый класс занимается своими задачами со своими данными(свойствами). Каждый класс имеет право (но не обязан) знать все о тех классах, которые он использует, но не должен ничего знать о классах которые используют его. Если класс Х хочет взаимодействовать с классами, которые его используют, то класс Х должен взаимодействовать на максимально абстракном уровне, без необходимости знать что-либо о классах, которые используют его. К счастью, для решения таких задач, в .NET есть механизм событий и делегаты. Итак, следуя этому принципу думаем: у нас есть форма, у формы есть ПрогресБар, ТабКонтрол и т.д., у ТабКонтрол есть ТабПейдж (ну или порожденный от него), а у ТабПейджа есть ВебБроузер. Таким образом форма стоит здесь в верху иерархии и это значит, что она имеет право знать обо всех классах, которые она использует, в том числе о твоем ТабПейдж и ВэбБроузер не нем. Мы не можем себе позволить того, чтобы что-либо самостоятельно меняло свойство класса, стоящего выше по иерархии, иначе был бы бардак: кнопка вдруг захотела поменять цвет фона у формы на красный, а ПрогрессБар - на синий, а сама форма при этом осталась бы в "шоке" от такого безобразия... Исходя из этих убеждений, приходим к некоторым решениям: 1) Первый, самый простой вариант - это предоставить ссылку на WebBrowser в твоем порожденном пэйдже. 2) Второй - объявить нужные тебе события и свойства в твоем порожденном пейдже. Форма должна сама подписываться на события броузера или пэйджа и отписываться от них когда выбирают другой пейдж. Также она сама должна устанавливать текст своего заголовка и менять значения СтатусБара и ПрогресБара, считывая значения свойств выбранного пейджа. Иначе будет неизбежна ситуация, когда два твоих открытых ТабПейджа начнут на перебив менять значения свойств того же, например, ПрогресБара, что не есть гуд во всех смыслах. Все, устал... Надеюсь тебе стал понятен этот подход... если что не ясно, пиши... бум объяснять дальше... -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
CheFF |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
-Mikle-, хех... ты первый, "кому не пофиг", который реально что-то объяснил... остальные все шлют в ртфм =)
Как у меня устроена программа - сложно объяснить на пальцах, я вот лучше кину ее код. Он ужасен, просто отвратителен, но все-таки я бы хотел сначала разобраться с тем, что есть, а потом уже переписывать по нормальному. Про правильную архитектуру: Саму концепцию правильного подхода я понял, вот только как ее реализовать не совсем понял, я такой человек, который без примеров очень сложно понимает. Можете подкинуть ссылочек по теме или подсказать, по каким темам искать? А то я в терминологии профан, потому и с поиском затруднения вечные =/ Присоединённый файл ( Кол-во скачиваний: 4 ) WebNavigate.rar 107,31 Kb |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
Ну вот так, например, будет правильнее. Замечу что не идеально, но для понимания достаточно. Я подправил код и привел его в порядок.
Присоединённый файл ( Кол-во скачиваний: 16 ) WebNavigate.rar 457,93 Kb -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
CheFF |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
Спасибо. Тут мне придется очень долго разбираться... Чувствую, что пока не перепишу - не вникну в саму суть, слишком много всего неопределенного.
|
|||
|
||||
ProgrammingLife |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 133 Регистрация: 19.1.2008 Где: ЧИРЧИКАГО (UZ) Репутация: нет Всего: нет |
Надо стремиться! все получится =
|
|||
|
||||
CheFF |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
Чувствуется мне нужно еще тучу кода прелопатить и своего понаписать, что бы быть А практиковаться то особо и неначем. Все эти абстрактные задачи, вроде "переставить две переменные, без использования третьей" или "написать телефонную книгу с..." и тому подоное, очень угнетает :/ |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
нет идей? продолжим: 1) написать подобие Vista Media Center 2) WinAmp с поддержкой сторонних скинов, плагинов, в том числе и визуальных 3) или хотя бы Tetris, у которого при помощи плагинов можно выбрать внешний вид, анимацию, правила перехода к новому уровню игры и вознаграждение за проход уровня, которое сможет быть почти любым последнее сам когда-то делал, давно уже... и не доделал до конца... терпения не хватило... -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
DnV |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 9.6.2008 Репутация: нет Всего: нет |
По поводу темы обсуждения... Вообще говоря, для "дельфиста" ответ на самый первый пост темы (про аналог "uses ...") будет звучать как "partial class ..."
Он просто смотрит на program.cs и думает, как из этого "модуля" увидеть другой Нужно время, чтобы понять, что мы говорим не о модулях, а о классах ;) Это сообщение отредактировал(а) DnV - 9.6.2008, 10:09 |
|||
|
||||
xStorm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.4.2007 Репутация: нет Всего: нет |
Учусь писать на C# в VS08.
Просмотрел прошлые посты, помогли мне больше разобраться. У меня следующая проблема: Программа считывает данные с реестра, в зависимости от данных, программа на этапе старта должна немного изменить "чертежи" форм, а доступ к ним я получить никак не могу. Как мне например с MainForm изменить данные "чертежа" других форм. через класс я так понял можно обращаться, но нужно задать тип static у класа той формы, данные на которой я хочу изменить. Но что-то оно не работает у меня. Сразу начинает ругаться на кучу других вещей внутри класса, типо везде static ставить надо, везде ставишь не работает тоже. Помогите, как получить доступ к элементам "чертежей" всех моих других форм. Может вопрос такой и рассматривался, но видимо его изложение мне не было понятно, спасибо |
|||
|
||||
ProgrammingLife |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 133 Регистрация: 19.1.2008 Где: ЧИРЧИКАГО (UZ) Репутация: нет Всего: нет |
Здарово ! xStorm ты работаешь над чертежами под компас что ли пишешь ??? Я НЕ СТАЛКИВАЛСЯ С ПРОБЛЕМОЙ С ЭТОЙ НО СОВЕТАЮ ТЕБЕ НАПИСАТЬ КОДИК ДА КТО НИ БУДЬ ОКЛИНКИТСЯ!
|
|||
|
||||
xStorm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 25.4.2007 Репутация: нет Всего: нет |
Ну коли не сталкивался, зачем писать-то
Термин "чертежи" до этого употребляли в теме. Это, насколько я знаю, Те формы которые ещё не были созданы программой в процессе её выполнения, но хранятся в ней. Любая форма которую делаешь в редакторе является "чертежом" на основе которого строится форма при необходимости её показа.
Вот пример создания формы по четрежу. Какой-то другой ког писать не вижу смысла, так как мне нужно знать не только в конкретном случае, но и во всех остальных я тоже должен понимать все это дело. Вопрос остался преждний Как мне с, допустим, начальной формы программы, обращаться и редактировать "чертежи" всех других форм? |
|||
|
||||
ivashkanet |
|
||||
Кодю потиху Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Так, чертеж это код и только он. Изменять его можно только во время написания кода. Т.е. до компиляции. MainForm это имя чертежа. С помощью этого имени можно создать новый объект по этому чертежу. Кроме того, есть набор данных и методов относящихся к чертежу, а значит ко всем экземплярам созданным по этому чертежу. Этот набор общих данных и методов помечается словом static. Поэтому сразу нужно приучить себя не обращаться к чертежу (классу) когда нам нужен конкретный экземпляр. Если нам нужно обратиться к конкретной форме ты должен иметь ссылку на нее и обращаться через нее (как эту ссылку передавать говорилось не раз в этой теме). Единственное исключение -- это паттерн Одиночка. Суть такая: есть только один экземпляр созданный по чертежу, так как он один, то его можно вывести в "данные чертежа". Получиться что-то типа:
|
||||
|
|||||
PashaPash |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
xStorm, "чертеж формы", который ты создаешь в дизайнере, превращается в последовательность строк в функции InitializeComponent. Отредактировать "на лету" код без хорошего знания языка не получится. Подойди к проблеме с другой стороны. Из главной формы уже после создания дочерней "по чертежу" описывай как именно та должна быть отображена. Вот твой же пример:
З.Ы. Предлагаю запретить слово "чертеж" как неоднозначное и вводящее в заблуждение. ivashkanet, за такой синглтон надо расстреливать :( |
|||
|
||||
Exai1e |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
Все по томуже вопросу, прочитал, прочитал но чтото не оч понял.
К примеру есть проект (1 форма + 1 доп. класс) как можно в дополнительном классе написать напримерно вот так ?:
вот коды ост юнитов:
воть... спасибо. Знаю что вопрос заезженный, но всеже. -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
||||||
|
|||||||
wotker |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 18.7.2006 Где: Ростов-на-Дону Репутация: 2 Всего: 5 |
А так и нельзя писать --------------------
ICQ :: 347306684e-mail :: wotker[at]rambler[dot]ru |
|||
|
||||
Exai1e |
|
|||
Опытный Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
wotker, я понимаю что тут так нельзя, но как сделать так чтобы можно было в дополнительном модуле обращаться к элементам формы ?
например в Delphi можно написать так:
-------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
wotker |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 18.7.2006 Где: Ростов-на-Дону Репутация: 2 Всего: 5 |
есть класс
есть экземпляр - form1_. обращаться к полю richTextBox1 можно только при помощи экземпляра (т.к. не помечено как static). Также richTextBox1 должно быть помечено атрибутом public если эти 2 условия выполняются - пишешь:
--------------------
ICQ :: 347306684e-mail :: wotker[at]rambler[dot]ru |
||||
|
|||||
Exai1e |
|
|||
Опытный Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
wotker, Если обращаться в том же модуле где и описание класса, то все нормально. А если создать новый класс, и попробывать достучаться до формы, то нечего не получается.
-------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
wotker |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 18.7.2006 Где: Ростов-на-Дону Репутация: 2 Всего: 5 |
Что ты понимаешь под модулем? В .net-е это сборка в которой компилируется класс.
Приведи пример где неработает. --------------------
ICQ :: 347306684e-mail :: wotker[at]rambler[dot]ru |
|||
|
||||
Exai1e |
|
|||
Опытный Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
модуль - новый фаил класса (когда нажимаеш на проект правой кн мыши, add - class), вот если из него обращатся к форме Form1.RichEdti1.Text... то это не работает.
-------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
wotker |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 18.7.2006 Где: Ростов-на-Дону Репутация: 2 Всего: 5 |
при этом не важно в каких файлах определены классы Это сообщение отредактировал(а) wotker - 5.7.2008, 21:42 --------------------
ICQ :: 347306684e-mail :: wotker[at]rambler[dot]ru |
|||
|
||||
Exai1e |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
например вот
Добавлено через 2 минуты и 49 секунд wotker, все вроде понял, спасибо. -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
||||||
|
|||||||
wotker |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 157 Регистрация: 18.7.2006 Где: Ростов-на-Дону Репутация: 2 Всего: 5 |
Так не пойдет.
Если у тебя статическое (т-е класса) св-во/поле, то да. В данном случае ты хочешь получить доступ к полю экзампляра класса. --------------------
ICQ :: 347306684e-mail :: wotker[at]rambler[dot]ru |
|||
|
||||
Jade |
|
||||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 18.10.2006 Где: Киев Репутация: нет Всего: нет |
приветствую.
вопрос скорее всего неновый, но ответы на похожие или аналогичные совершенно непонятны для меня. есть форма. на форме есть панель. на панели пикчербокс. есть класс "картинка". в нем сама картинка типа bitmap, куча ее параметров и функций для работы с ними. есть опен_файл_диалог, который открывает картинки. у него на file_ok прописано создание объекта класса "картинка".
в конструкторе класса "картинка" мне необходимо в пикчербоксе (тот который на панеле формы) отобразить мой битмап. --- я сделал в классе формы функцию
но ее вызвать в конструкторе класса "картинка" нельзя. расскажите пожалуйста как мне нужно поступить. заранее спасибо. Это сообщение отредактировал(а) Jade - 27.8.2008, 15:58 |
||||
|
|||||
Moid |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Проблема следующая:
Есть форма, на разных табах которой лежит 2 UserControl'а. Нужно при переходе на 2-ю вкладку заполнить данными конторолы этой вкладки. Сделать это нужно так, чтобы небыло завязанности на форму. Решил сделать так: Вызываю при переходе на квладку метод из класса Presenter'a метод, в который передаю свой "объект":
В результате контролы пустые... Значения в них почемуто не зхаписываются, почему? -------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
||||||
|
|||||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
Moid,
Создавать новый объект наверно не стоит. Надо просто найти объект на вкладке и вызвать у него FillValues -------------------- СУВ, Partizan. |
|||
|
||||
Moid |
|
|||
Опытный Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Partizan, каким образом его можно найти? Можно пример.
-------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
|||
|
||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
Moid, пробежаться по коллекции дочерних контролов на вкладке
TabPage.Controls -------------------- СУВ, Partizan. |
|||
|
||||
Moid |
|
||||
Опытный Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Проблему решил так:
Передаю с формы ссылку на сонтрол:
В презентере:
-------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
||||
|
|||||
v_enom |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 101 Регистрация: 11.10.2006 Репутация: нет Всего: нет |
я решил вот как:
требовалось: из формы MainForm вызвать форму ConnectForm через кнопку "Connect" в меню, а потом из формы ConnectForm сделать видимой еще одну кнопку "File" меню в MainFrom (ранее была невидема) делаем так: в файле главной формы mainForm (в которй потом будем что-то изменять из 2ой формы ConnectForm. Я делал Enabled кнопку "File" в menuStrip) делаем открытый метод public void FileToolStripEnabledChange(bool val) и "финт ушами" ввиде передачи во 2ую форму this (объекта первой формы mainForm)
а во второй форме, которая будет что-то менять по нажатию кнопки делаем следующее:
по-другому у меня не получилось. просто сделать public - все равно выдает ошибку доступа. Добавлено @ 01:10 P.S. Для тех, кто переходит с Delphi или, как я, с Builder - реально непонятно и неинтуитивно. Это сообщение отредактировал(а) v_enom - 9.11.2008, 01:12 |
||||
|
|||||
Rififi |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
v_enom,
делай взаимодействие между формами через эвенты
В форме ConnectForm
|
||||
|
|||||
DarkASU |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.5.2008 Репутация: нет Всего: нет |
А такой вопросик в дочерней форме есть строка коннекта к серверу как передать в основную что коннект прошел успешно. И работать далее из основной формы под зарегистрированым юзером.
|
|||
|
||||
EgoBrain |
|
||||
Опытный Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
|
||||
|
|||||
thomas |
|
|||
Доцент... почти Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Привет всем.
Перечитал всю тему и ответа на нужный вопрос не нашел. Имеем MDIконтейнер(главная) и ряд дочерних форм. Дочерние формы вызываются нажатием на кнопки или пункты меню в главной форме. Для того что бы избежать повторного открытия уже открытого дочернего окна выставляю свойство кнопок или меню Enable = false. Открылось дочернее окно и кнопочка болше не доступна. Все вроде розово и пушисто. Да у нужных кнопок и пунктов меню свойство modofiers выставлено в public. Но проблема в том что в событии FormClosed для дочерней формы я не могу обратиться к контролам главной формы, а только к свойствам и методам самой формы. И как решить данную задачу? ЗЫ там на первых страницах предлагаеться передавать ссылку на главную форму в конструктор дочерней, но и в этом случае до контролов главной формы не добраться. Это сообщение отредактировал(а) thomas - 23.1.2009, 18:26 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
Drabuna |
|
||||
Дивелоперчег Профиль Группа: Участник Сообщений: 157 Регистрация: 27.3.2008 Где: Киев Репутация: 2 Всего: 3 |
МСДН помог.
В parent форме:
В child форме:
|
||||
|
|||||
thomas |
|
|||
Доцент... почти Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Привет всем еще раз.
Решение вопроса (не создавать много эекземпляров дочернего окна в MDI) подсмотрел на CODEPROJECT -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
BestRoot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Привет всем
Есть задача обратится из одного приложения в другое как это сделать ? PS мне говорили что надо через Дискрипторы но я понятия не имею как ими пользоватся |
|||
|
||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
BestRoot, приложения левые или свои собственные?
-------------------- СУВ, Partizan. |
|||
|
||||
BestRoot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
свои собственные |
|||
|
||||
Incvizitor |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.3.2009 Репутация: нет Всего: нет |
Приветствую всех!
Подскажите, как реализовать работу с основной формой из класса. Я работаю обычно так:
И сам класс:
Так все работает как нужно, но столкнулся с проблемой, когда пришлось в классе описывать такое:
Все что написано прочитал, но, увы, ничего не подошло, либо не понятно как использовать. Если кто может, напишите подробный пример. Заранее спасибо! Это сообщение отредактировал(а) Incvizitor - 24.3.2009, 02:01 |
||||||
|
|||||||
KelTron |
|
|||
Опытный Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Incvizitor, напиши, что конкретно тебе нужно реализовать (как ты собираешься работать с прогресс баром), тогда уже можно будет написать конкретный пример кода.
А вообще по BackgroundWorker смотри тут -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
dekroll |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Привет всем!
Совсем недавно начал писать на Visual C++ и возникла такая же проблема. Не могу обратиться из дочерней формы на родительскую. При попытке добавить на Form2 строку
компилятор на Form1 начинает ругаться на вызов второй формы
Подскажите, пожалуйста, в чем проблема и, если можно, приведите исходник. Заранее благодарен. |
||||
|
|||||
TiMeTraSheR |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.6.2009 Репутация: нет Всего: нет |
Прочитав весь топик, вычерпал некоторые полезные советы, но проблему так и не решил =(
Визуально программа выглядит так: В Program.cs создается экземпляр DataCenter, потом вызывается. В DataCenter.cs создается и вызывается экземпляр MainForm, а так же создаются экземпляры TelnetClient, Configuration и ServerManager в кол-ве одной штуки. По задумке, все вычисления должны проводиться в DataCenter, а из MainForm должны вызываться методы из созданых в DataCenter экземпляров, ну и в самой MainForm должны выводиться некоторые переменные, хранящиеся в этих экземплярах. Обращаться из MainForm в сам DataCenter и имеющиеся в нем экземпляры получается, используя следующий код
А вот как это использовать с классами я не знаю, ибо во-первых писать в каждом методе "(DataCenter p)" не удобно, а во-вторых компилятор орет на "(this)", типо его нельзя исппользовать в этом контексте. Обращаться из TelnetClient, Config и т.д. к MainForm не получается =( Да и друг к другу собственно тоже. Вот примеры:
При таком раскладе программа компилится нормально, но когда вызываешь из метод из MainForm, то происходит вылет с ошибкой "...В экземпляре объекта не задана ссылка на объект..." Дебагер указывает строчку "dc.tc.Set(dc.conf.ls_host, dc.conf.ls_port, 10);", которая в ServerManager. Предварительно спасибо на ответы ^^ ПС: прочитал свой пост, какой-то он не очень читаемый, т.к. много я его редактировал и вышла полная белеберда, но думаю общий смысл ясен. UPDATED: хм, кажется я понял свою ошибку. Я пытался обратиться не к экземпляру DataCenter, а к классу(чертежу). А как тогда обратиться к экземпляру, если он cоздан в Program? UPDATED: Проблема решена. Это сообщение отредактировал(а) TiMeTraSheR - 7.6.2009, 18:10 |
||||||||||||
|
|||||||||||||
Miktor |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 1.8.2009 Репутация: нет Всего: нет |
Здравствуйте,у меня проблема.
Есть главная форма Form1. В ней есть кнопка:
Открывается новая форма с 4 полями для ввода(в них уже стоят значения переданные в массиве) и 1 кнопкой,при нажатие на которую
должны передаваться в основную форму некие данные введенные в текстбоксы но VS говорит :
Подскажите что я делаю нетак. |
||||||
|
|||||||
Enteropoly |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 50 Регистрация: 17.6.2009 Репутация: нет Всего: нет |
||||
|
||||
IAmHell |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.10.2009 Репутация: нет Всего: нет |
Здравствуйте.
Имеется 2 формы : Form1 - родительская, Form2 - дочерняя Требуется чтобы объект класса Form2 был виден всем ункциям класса Form1 и была возможность передать в конструктор Form2 указатель на объект класса Form1, т.е. на родительскую форму Сейчас это выглядит так:
Так форма F видна из всех функциий класса Form1 (если убрать из списка параметров this), но компилятор ругается на this в качестве параметра при создании объекта класса Form2: error CS0027: Keyword 'this' is not available in the current context В конструкторе Form2 всё прописано как положено и он тут не при чём Где (или как?) нужно объявить экземпляр класса Form2 чтобы он был виден из всех функций класса Form1 и можно было передать ему указатель на родительскую форму? Это сообщение отредактировал(а) IAmHell - 19.10.2009, 22:31 |
|||
|
||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
IAmHell, перенесите создание объекта в конструктор.
-------------------- СУВ, Partizan. |
|||
|
||||
IAmHell |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.10.2009 Репутация: нет Всего: нет |
Partizan, вы имеете в виду так?
Пробовал и так. Тогда форма F не доступна для функций Func1() и Func2() |
|||
|
||||
mrbrooks |
|
|||
трололомен Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
Думаю нет.
Другое дело не понятно зачем нужна ссылка на родительский класс в конструкторе дочернего (при условии что конструктор дочерней формы перегружен). Чем вызван такой изврат? |
|||
|
||||
IAmHell |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.10.2009 Репутация: нет Всего: нет |
Всё затевалось для того чтобы из Form2 можно было обращаться к контролам и функциям, расположенным на Form1 и наоборот. Прочитав топик, я сделал вывод что такой вариант наиболее корректный с точки зрения ООП. Если есть другие варианты добиться такой функциональности, с удовольствием ознакомлюсь
|
|||
|
||||
mrbrooks |
|
|||
трололомен Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
это да. правда из недостатков такого подхода стоит отметить не возможность использования конструктора по умолчанию. если это не критично - то все гуд. Инкапсуляция, как говорится наше все. Я к примеру использую собственные события в дочерних формах, которые обрабатываю в главной. |
|||
|
||||
LifeOfWorld |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.7.2009 Репутация: нет Всего: нет |
Вопрос по WPF. Перенаправили сюда =)
Допустим есть 2 xaml файла (file1.xaml, file2.xaml) В file1.xaml объявляется элемент ComboBox: <ComboBox x:Name="cb" Grid.Column="1" VerticalAlignment="Center" Width="50" Height="25" FontSize="15"/> В file2.xaml.cs должен использоватся код вроде этого: ... cb.Items.Add(i + 1); // Filling ComboBox ... Но file2.xaml не знает что такое "cb" Вопрос: Как правильно обратиться к cb в file2.xaml.cs? Решения вроде обратиться из любого места file2.xaml.cs не подходят. Form frmMain = Application.OpenForms["frmMain"]; Button btn1 = (Button)frmMain.Controls["button1"]; [http://forum.codenet.ru/showthread.php?t=37091] |
|||
|
||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
LifeOfWorld, что-то мне подсказывает, что для решения Вашей задачи, Вы избрали неверный подход...
что Вы хотите получить от такого взаимодействия? -------------------- СУВ, Partizan. |
|||
|
||||
maxfox |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.7.2009 Репутация: нет Всего: нет |
Товарищи! Помогите, пожалуйста, по указанной теме!
Есть две формы: основная и дочерняя. Основная - это та, что создаётся по умолчанию:
- на форме есть вьюпорт. При вызове метода ReDrawWin - вьюпорт перересовывается. Так же на форме есть кнопка. При нажатии на ней открывается вторая форма:
-На второй форме расположены некие объекты управления(ввод данных) Мне необходимо, чтобы действии на второй форме - при работе с объектами управления, обновлялся вьюпорт основной формы. То есть, по сути, нужно вызвать метод ReDrawWin. Как это сделать? Я пытаюсь, как это описывали выше, передать ссылку главной формы, во вторую форму, через конструктор второй формы:
- однако компилятор видит ошибку в записи: Form1^ MainForm - и пишет error C2061: синтаксическая ошибка: идентификатор "Form1". Не могу понять, в чём дело. Ведь Form1 - это имя класса, а не переменная, т.е. вроде должно быть всё нормально..... Подскажите плиз - как правильно сделать!! |
||||||
|
|||||||
maxfox |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 29.7.2009 Репутация: нет Всего: нет |
Вроде бы я нашёл решение. воспользовавшись классом Delegate
- при помощи него я создал ссылку на нужный метод в основной форме, и передал эту ссылку во вторую форму. Теперь я могу использовать эту ссылку, где угодно во второй форме. |
|||
|
||||
GX777 |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 70 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
прочитал данную тему... Итак у меня есть 2 формы: MainForm и Form1.
у MainForm есть баттон1 и текстбокс 1. У Form1 есть только кнопка. мне нужно из формы Form1 изменить текстбокс1 у MainForm при нажатии на кнопку. Пишу на Form1:
обработчик события на кнопку в главной форме (MainForm):
но после всех манипуляций я могу изменять только текст шапки у MainForm. textbox1.text я по прежнему не могу менять. Что я делаю не так? |
||||
|
|||||
A5uKa |
|
||||
TЋ♥s F1rȜ iƧ BurȠiƞg Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
А что вы вообще пытались сделать ? там в начале топика есть примеры , а тут была особая задумка я полагаю ?.. |
||||
|
|||||
GX777 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 70 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
мне вообще всего лишь нужно из form1 изменить текст в текстбоксе на Mainform. Здесь гдето читал что так(написано выше) можно это сделать но у меня не работает.Никак не могу толком понять как правильно обращаться к обьекту другой формы
|
|||
|
||||
A5uKa |
|
|||
TЋ♥s F1rȜ iƧ BurȠiƞg Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
По нажатию кнопки делаешь Mainform.textBox1.Text="ля-ля-ля"; Другое дело что такое Mainform. Обычно когда создаётся проект MainForm у тебя уже есть ... ведь так ? у меня в данный момент нету под рукой студии, но помойму она создаётся как-то так Application.Run(MainForm()); можно конечно вытаскивать её и отсюда через Application.Forms или что-то такое, но лучше обозвать MyForm = new MainForm(); Application.Run(MyForm); соответственно у MyForm правильная видимость и доступность должна быть. Ну может ещё как я не знаю, я пишу консольные приложения. |
|||
|
||||
GX777 |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 70 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
с консолью и у меня проблем не было.
не катит у текстбокса модификатор private, я конечно могу поставить на public... а MainForm эьто просто я так обозвал первыую форму,а Form1 вторую. в общем у меня вот такая фигня: Присоединённый файл ( Кол-во скачиваний: 3 ) Yebotnya.rar 31,89 Kb |
||||
|
|||||
GX777 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 70 Регистрация: 29.3.2008 Репутация: нет Всего: нет |
плин,забыл поменять имя файла(((прошу не банить я случайно
Присоединённый файл ( Кол-во скачиваний: 1 ) Yebotnya.rar 31,89 Kb |
|||
|
||||
surfrider |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 9.8.2010 Репутация: нет Всего: нет |
Как сделать сабж на C++/CLI?
Нашел похожую тему http://forum.vingrad.ru/topic-199937.html , но его вариант меня совсем не устраивает. В общем, есть главная форма Form1 и дочерняя форма, пусть Form2. В классе главной (form1.h) есть такие строки:
Задача, как и везде: обратиться к определенным переменным или объектам главной формы(form1) из дочерней формы (form2). Я пытался решить, как тут описывали: передача указателя на родительскую форму в дочернюю (Form2 ^childWindow = gcnew Form2(this)). Но проблема: в дочерней форме в таком случае не определен класс Form1 и как его определить, я не знаю. Ведь если в файле form2.h написать #include "Form1.h", то вылезет миллион ошибок. Какие есть варианты, кроме того, чтобы создавать отдельный класс, реализующий это? |
|||
|
||||
KelTron |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Как вариант, но думаю запарит вручную выдирать обработчики из хедера и переность в цпп.
Form1.h
Form2.h
Form2.cpp
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||||
|
|||||||
surfrider |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 9.8.2010 Репутация: нет Всего: нет |
KelTron, спасибо, довольно хитро, но есть ли еще какие-нибудь варианты?
|
|||
|
||||
Georgich |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 105 Регистрация: 20.1.2008 Репутация: нет Всего: нет |
Приветствую.
А я все никак не могу понять, как обратиться из второй формы к dataGridView1 на первой. Мне необходимо по нажатию на кнопке на второй форме добавить данные из textBox и comboBox в dataGridView1 на первой форме. Вторую форму я вызываю так:
Собственно, а что надо сделать во второй форме? Спасибо. |
|||
|
||||
lukan2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
surfrider Как вариант: имеется две формы Form1 и Form2. На первой поле textBox1 и одна кнопка. В поле textBox1 вписываем строку и по нажатии кнопки открывается вторая форма, где имеется только одно поле textBox1, в котором и появляется текст из textBox1 первой формы.
Для всего этого необходимо во второй форме (файл Form2.h) изменить конструктор следующим образом для передачи в него данных:
Далее в файле Form1.h , там где необходимо, написать следующие строки кода:
Так можно передать любой тип данных, но только из более ранней формы в более позднюю. Нужно лишь немного тогда изменить конструктор! Это сообщение отредактировал(а) lukan2 - 14.12.2010, 00:58 |
||||
|
|||||
Nikosss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 9.1.2007 Где: Литва Репутация: нет Всего: нет |
Здравствуйте,
есть форма Form1, на ней несколько Label'ов. При нажатии курсором на один из Label'ов появляется форма frmPopUp. На этой форме есть Label, текст которого при нажатии на него, нужно вставить в текст Label'a, который вызвал форму frmPopUp. Обработчики событий:
Я не знаю как обратиться к Label'у, который вызывает форму frmPopUp и передать ему текст с Label'a, нажатого на форме frmPopUp |
|||
|
||||
Nikosss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 9.1.2007 Где: Литва Репутация: нет Всего: нет |
Здравствуйте,
есть форма Form1, на ней несколько Label'ов. При нажатии курсором на один из Label'ов появляется форма frmPopUp. На этой форме есть Label, текст которого при нажатии на него, нужно вставить в текст Label'a, который вызвал форму frmPopUp. Обработчики событий:
Я не знаю как обратиться к Label'у, который вызывает форму frmPopUp и передать ему текст с Label'a, нажатого на форме frmPopUp |
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |