Итак, я создаю приложение 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, которая позволит мне рисовать после того, как программа уже загружена, на основе события?
Спасибо за помощь, надеюсь, я был ясен в своем вопросе:)