![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Валерия |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Просьба не говорить что вопрос повторялся.
Есть класс, есть форма. В одном из методов класса есть обращение к объекту формы. Но:
Код:
Это сообщение отредактировал(а) Валерия - 19.12.2007, 23:26 |
||||
|
|||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Самое важное, что в первую очередь нужно понять при изучении C# - то, что всё является объектами.
Давай представим твой код с точки зрения автомобилестроения. Ты создаёшь класс (а на обыденном языке это будет означать - чертёж, шаблон, схема, как угодно) Автомобиль. В этом чертеже ты прорисовываешь все детали, все контуры, даже все возможные действия автомобиля (например, "открыть дверь"). Но что будет, когда ты попытаешься в своей программе изобразить следующее: Автомобиль.ОткрытьДверь(). Стоп... Ведь Автомобиль - это всего лишь чертёж. Просто штрихи карандаша на листке бумаги. Как можно сказать листку бумаги с нарисованным автомобилем, чтобы тот открыл дверь? Это, по понятной причине, невозможно. Чтобы претворить задумку в жизнь, нужно сперва по чертежу создать автомобиль. Т.е. написать что-то вроде "Автомобиль МойАвто = new Автомобиль(). Отлично! Теперь МойАвто не является чертежом, а именно самой машиной, созданной по этому чертежу. И вот теперь мы можем легко и спокойно приказать МоемуАвто открыть дверь (МойАвто.ОткрытьДверь() ). Думайте сами, решайте сами ![]() -------------------- 3 ГОДА НА ![]() |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Но ведь textbox1 это не "чертеж" а уже созданный "автомобиль", но к нему не получается из "далека" обращаться
![]() |
|||
|
||||
VisualProgrammerNET |
|
||||||||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Текстбокс - нет. Но как мы к нему приходим?
WindowsApplication14.Form1.textBox1.Text Эта Form1 и есть как раз только чертёж формы, но не сама форма! В этом-то и загвоздка ![]() Добавлю конкретно по данному примеру: An object reference is required for the nonstatic field, method, or property 'WindowsApplication14.Form1.textBox1' = Требуется ссылка на объект для не статического поля, метода или свойства. Чтобы можно было что-то изменять в классе А из класса Б нужно предоставить сначала классу Б чертёж, по которому он будет знать, что и как работает в классе А. Чтобы работало всё, как положено, следует внести изменения: 1. В классе Form1 создать метод для изменения текста в текстбоксе. Это - инкапсуляция. По умолчанию все контролы создаются с модификатором private, что не позволит менять их из каких-либо других классов. Для изменения мы и создадим данный метод
2. В классе test создать внутреннюю переменную типа Form1 и параметризованный конструктор, чтобы класс test знал, с чем имеет дело.
3. Метод go класса test теперь будет иметь вид
4. Ну и соответственно создаваться класс test из класса Form1 будет строчкой
Вуаля ![]() ЗЫ. Я конечно щас немного в подпитии... но даже простая проверка в Visual Studio: система IntelliSense (автодополнение) не даст написать такой код... (WindowsApplication14.Form1.textBox1.Text) =) Это сообщение отредактировал(а) VisualProgrammerNET - 19.12.2007, 23:56 -------------------- 3 ГОДА НА ![]() |
||||||||
|
|||||||||
anonym |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: нет Всего: 3 |
||||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Большое спасибо!
|
|||
|
||||
informatik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.11.2007 Репутация: 2 Всего: 6 |
Ну очень странная, и на мой взгляд абсолютно неправильная конструкция конструкция...
![]() An object reference is required for the nonstatic field, method, or property 'WindowsApplication14.Form1.textBox1' Это означает что ты обращаешься к классу как к таковому, а в программе работа осуществляется с объектами класса, которые создаются после запуска программы. VS ругается что ты пытаешься вызвать статичекий метод, свойство и т.д. которого не существует, и тем более к статическим методам могут обращаться только методы класса. Вообщето все должно быть ну хотябы так:
Или класс test должен быть тоже формой... Добавлено через 1 минуту и 48 секунд Блин пока писал, уже ответили........ нечего было по телефону разговаривать........... ![]() --------------------
namespace informatik |
|||
|
||||
D_F_V |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.3.2007 Где: Vladivostok Репутация: нет Всего: 1 |
В классе можно не указывать начальное значение переменных... ну и this тоже не обязателен... можно написать так...
Это сообщение отредактировал(а) D_F_V - 20.12.2007, 10:51 |
||||
|
|||||
it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: нет Всего: 1 |
А можно передать this по ссылке и обращатся к нему:
Только textBox1 необходимо сделать public |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Тему закрыл как дубликат.
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |