_Q12_ Ответов: 1

Событие Paint, внешние методы


Внутри события Paint я хочу иметь возможность добавлять какие-то методы? что я могу развивать их столько, сколько захочу в другом месте кода.
Некоторое время назад я провел несколько тестов, и это подразумевало PaintEventArgs (я думаю), но я точно не помню, как я это сделал. e(MenuTop) или что-то еще, что я сделал. А с другой стороны, PaintEventArgs MenuTop () или что-то в этом роде. Я много гадал, пока не нашел решение. Вот почему я сейчас прошу о помощи.
void Screen_Paint(object sender, PaintEventArgs e)
     {
         //these methods must be rendered in a separate class(this one)
         MenuTop();
         MenuDown();
         Background();
         Player();
         Enemy();
         Treasure();
      }

Спасибо.

Что я уже пробовал:

........................................................................................................................................- это всего лишь идея.

Eric Lynch

Немного трудно следовать вашей терминологии. По синтаксису (в вашем примере) следующими будут методы (а не классы): MenuTop, MenuDown, Background, Player, Enemy и Treasure. Хотя по названию они больше похожи на классы.

Например, если вы предполагаете, что они будут классами, то в других местах вы обычно создаете их экземпляры, примерно так:

частная MenuTop menuTop = новый MenuTop();

И тогда, возможно, в вашем методе ScreenPaint вы могли бы сделать что-то вроде следующего:

menuTop.Screen_Paint(отправитель, e);

Это предполагает, что вы объявили метод Screen_Paint в классе MenuTop.

Итак, предполагая, что вы ясно понимаете термины, не могли бы вы улучшить свой вопрос, чтобы он использовал правильные термины и соответствующий синтаксис.

Кроме того, если вам неясно различие между классом и методом, я предлагаю вам прочитать немного больше о синтаксисе C# и объектно-ориентированном дизайне в целом, прежде чем пытаться решить эту проблему. В маловероятном случае, если это так, я был бы рад предоставить некоторые ссылки на приличные материалы для чтения.

_Q12_

Я не знаю, почему я написал "классы", но я думал о "методах". Я очень устал. Жалеть об этом. Наверное, я думал о слишком высоком уровне. :) Я исправил ошибку в главном вопросе.

Теперь я сделал тест, и я получил то, что хотел с первой попытки - вау для меня. Но, конечно же, после того, как я посмотрю _again_ на ваш ответ , я тоже увижу решение, данное вами "menuTop.Screen_Paint(sender, e);", так что... Опять же, хорошая работа для вас. :)

--------Пожалуйста, примите решение-------------

Вот такое испытание _working_ :
Sprite cat = новый Спрайт(WindowsFormsApplication2.Свойства.Ресурсы.встань);
MenuTop недействительным(объект отправителя, объект painteventargs е)
{
e.графика.Функция drawImage(кат.Изображения, кот.Прямоугольник);
}

Screen_Paint недействительным(объект отправителя, объект painteventargs е)
{
MenuTop(отправитель, e);
}

1 Ответов

Рейтинг:
2

OriginalGriff

Вдобавок к тому, что сказал Эрик, вы, кажется, путаетесь в том, как "делать вещи" в C# - этот код "процедурный", а не событийный.

В C# все находится внутри класса - нет понятия чего-либо "вне классов", даже глобальных переменных, а тем более событий. Таким образом, нет никакого способа иметь событие paint "вне классов" - это на самом деле было бы событием Paint для формы в целом, и вы все равно не создаете экземпляры классов в событиях Paint (Кроме "на лету" cFont и Brush - элементов) - вы, конечно же, не создадите основные экранные объекты в событии Paint, потому что это может происходить сто раз в секунду, давая вам сто элементов MenuTop, сто игроков и так далее.

Вместо этого ваша форма создаст один экземпляр каждого из них, поместит его в форму и позволит ему отвечать за рисование самого себя в своем собственном событии рисования.

Это сложно, и на самом деле нужно гораздо больше, чем мы можем вместить в маленькое текстовое поле - я бы посоветовал вам вернуться и еще раз прочитать свои заметки о курсе / рекомендуемую книгу, прежде чем идти дальше!


_Q12_

Извините, но это моя ошибка. Я устал и вместо методов написал "классы". Но интересен ваш ответ все же.

На самом деле мне было любопытно узнать ваш ответ, и я действительно попытался "вне классов" сделать переменную поля. Я получил эту ошибку: "Ошибка 1 ожидаемый класс, делегат, перечисление, интерфейс или структура ". Итак... система работает так, как должна. :) хех.
О самой проблеме: я все - таки нахожу ответ- с помощью ответа Эрика Линча тоже. И я призываю его с этого момента писать прямые решения. :) Хорошая работа, ребята, и спасибо вам за Вашу поддержку!
Мне также любопытно, что вы сказали: "этот код является "процедурным", а не событийным." Не могли бы вы привести мне несколько примеров, что это значит? Я предполагаю, что процедурный процесс похож на те ассемблеры для MCU(микроконтроллера) и процессоров в целом. Или я ошибаюсь? Я знаю о них, потому что я действительно использовал MASM, который, как мне кажется, назывался, для программирования PIC16f84 в 2000-х годах. Я также начинаю программировать на Pascal и c и c++(v1) - также для того, чтобы командовать этими MCU или PIC, как они правильно называются.

Eric Lynch

Процедурное программирование против событийного программирования-это, по сути, действие против реакции. Вы можете найти немного больше об этом, а также другие парадигмы здесь: https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms