![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
elvad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.4.2008 Репутация: нет Всего: нет |
Здравствуйте! Учусь по Петцольду - Программирование для Microsoft Windows на С#. Знаком только с основами Си. Дошёл до Главы2. "Обработка события Paint". Появились непонятные моменты. (Я в код добавил свои комментарии. И проект создавал пустой). Вот программа из книги:
По этому коду такие вопросы: 1) Правильно ли я понимаю, что при создании обработчика события form1_Paint в параметрах указано, что создаются объект sender из класса object и объект pea из класса PaintEventArgs) 2) Можно ли сравнить создание обработчика событий из делегата, с созданием объекта из класса. 3) Я пытаюсь включить в обработчик событий form1_Paint изменение названия Form1: form1.Text = "New name"; но возникает ошибка "name form1 does not exist in current context" |
|||
|
||||
Kefir |
|
||||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
1) не совсем. обработчик события - это обычная функция. object sender, PaintEventArgs pea - это её аргументы. они, конечно, где-то создаются, но не в самом обработчике. проще говоря, где-то в классе формы есть строка this.Paint(this, new PaintEventArgs(...)).
2) очень отдалённо, но можно. 3) значит нет такой переменной. а нет потому, что ты её объявил в методе Main, то есть её звать можно только там. Тут есть два варианта. Первый вариант - это брать форму из аргумента sender (в sender хранится обьект, который вызвал Paint). то есть ты можешь написать
Или объяви form1 как член класса Simple
|
||||
|
|||||
WarHog |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.10.2007 Где: Воронеж Репутация: нет Всего: 2 |
Не запускается, очевидно, из-за того, что выбран тип приложения Windows, а не Console (опциями компилятора, если компилишь из строки csc или в Project Properties->Application->Output type) --------------------
|
||||
|
|||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
WarHog, ещё раз говорю - в консоли студии при дебаге будет этот вывод. или же если запустить программу из консоли - тоже будет работать.
Добавлено через 1 минуту и 47 секунд и тип приложения к этому не имеет никакого отношения. просто если вы пишете консольное приложения - вы его запускаете в консоли и видите вывод. а если винформсы, то консоли вы не видите («Ты суслика видишь? — Нет. — И я нет. А он есть!»). вот так. ![]() |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
WarHog,
= output ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
WarHog |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.10.2007 Где: Воронеж Репутация: нет Всего: 2 |
Kefir, это понятно
![]() Я и имел в виду, что если выбрать winforms, то консоли не будет видно, просто не так выразился ![]() --------------------
|
|||
|
||||
elvad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.4.2008 Репутация: нет Всего: нет |
Kefir,
Спасибо за разъяснение! Я использую Visual C# 2008 Express. Первый вариант получился, когда я написал (sender as Form).Text = "New name"; А вот на второй выдаёт ошибку An object reference is required for the non-static field, method, or property 'Simple.form1' Ещё внутри функции form1_Paint есть строки: Graphics g = pea.Graphics; g.Clear(Color.Chocolate); Петцольд пишет, что PaintEventArgs содержит свойство Graphics, которое включает в себя экземпляр класса System.Drawing.Graphics (пока не могу понять, как свойство может включать в себя целый объект ![]() А g это объект типа Graphics. Какой смысл записывать две строки кода и создавать g, когда я написал одну строку pea.Graphics.Clear(Color.Chocolate); и приложение запустилось с тем же эффектом? Это сообщение отредактировал(а) elvad - 22.4.2008, 09:32 |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
покажи что у тебя написано, такое впечатление что ты пытаешься использовать не static мембера как будто это static (например вместо form1.Text = "" написано Form.Text = ""). ну тут два смысла может быть: 1. показательный (показать какой именно класс у pea.Graphics) 2. часто так делается для удобства, чтобы каждый раз не писать pea.Graphics, а использовать просто g. Это сообщение отредактировал(а) Kefir - 22.4.2008, 10:40 |
|||
|
||||
elvad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.4.2008 Репутация: нет Всего: нет |
Да собственно, тот код который ты предложил в самом начале, я вставляю в файл проекта и жму F5. Появляется эта ошибка.
|
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
тогда проект запости
|
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
elvad, возьми себе что-нить попроще Петцольда почитать, Шилдта например. А то такое ощущение, что ты не понимаешь то, что читаешь...
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
elvad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.4.2008 Репутация: нет Всего: нет |
Kefir,
Вот проект http://slil.ru/25720197 Source777, Может ты и прав, у Петцольда по консоли немного примеров, хотя он в предисловии пишет, что для чтения небходимо знание С. (наверное очень хорошее знание ![]() Посмотрю Шилдта... |
|||
|
||||
Kefir |
|
||||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
чёрт, вот я и постарел. совсем запутался. в общем дело то в том, что так ты пытаешься вызвать член класса из статичных методов. у тебя они оба - статик. то биш некуда обращаться, так как обьекта Simple как такового нет. соответственно, тебе надо написать ещё один класс, который будем заниматься всеми делами, а в мэйне просто писать:
А вообще по хорошему надо делать главную форму, в которой делать все дела. То есть примерно так:
|
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |