|
Модераторы: 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 |
||||||
|
|||||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |