Использование PaintEventHandler - приложение Windows Forms для Visual C ++ (Studio 2010) - PullRequest
0 голосов
/ 29 апреля 2011

Итак, я создаю приложение Windows Forms в Visual C ++ 2010 и хочу добавить событие в текстовое поле. Когда программа загружается, буква А выводится на экран. Когда вы вводите текстовое поле, буква должна стать красной.

Имя текстового поля - AngleA, и этот код у меня есть:

this->AngleA->Enter += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::AngleA_Enter);
//many lines later
this->Controls->Add(this->AngleA);
//many lines later
public: System::Void Form1::AngleA_Enter(System::Object^  sender, PaintEventArgs^  e) 
     {
         System::Drawing::Font^ textFontA = gcnew System::Drawing::Font("Arial", 16);
         System::Drawing::SolidBrush^ textBrushA = gcnew System::Drawing::SolidBrush(Color::Red);
         e->Graphics->DrawString("A", textFontA, textBrushA, 300, 120);
     }

Оригинальный рисунок письма происходит в отдельной функции, здесь:

    public: virtual Void Form1::OnPaint(PaintEventArgs^ pe ) override
{
   Graphics^ g = pe->Graphics;

   System::Drawing::Font^ textFont = gcnew System::Drawing::Font("Times New Roman", 16);

   SolidBrush^ textBrushA = gcnew SolidBrush(Color::Black);

   g->DrawString("A", textFont, textBrushA, 300, 120);

}

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

error C2664: 'System::Windows::Forms::Control::Enter::add' : cannot convert parameter 1 from 'System::Windows::Forms::PaintEventHandler ^' to 'System::EventHandler ^'
1>          No user-defined-conversion operator available, or
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Мне кажется, что объект form1 (имя по умолчанию для класса в приложениях Windows Form) будет принимать только параметр EventHandler для «this-> AngleA-> Enter + = gcnew», а не PaintEventHandler, но я не понимаю, почему , Есть ли способ создать функцию события Enter, которая позволит мне рисовать после того, как программа уже загружена, на основе события?

Спасибо за помощь, надеюсь, я был ясен в своем вопросе:)

1 Ответ

0 голосов
/ 29 апреля 2011

Вы можете добавить PaintEventHandler только к событию Paint;не к событию Enter.

Возможно, вы захотите добавить нормальное EventHandler к событию Enter и вызвать Invalidate() в обработчике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...