【发布时间】:2023-03-19 22:18:01
【问题描述】:
所以,我正在 Visual C++ 2010 中创建一个 Windows 窗体应用程序,并且我想将一个事件添加到一个文本框中。当程序加载时,一个字母 A 会打印到屏幕上。当你输入文本框时,字母应该会变成红色。
文本框的名称是 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 窗体应用程序中类的默认名称)只接受“this->AngleA->Enter += gcnew”的 EventHandler 参数,而不接受 PaintEventHandler,但我不明白为什么.有什么方法可以创建一个 Enter 事件函数,允许我在程序加载后根据事件进行绘画?
感谢您的帮助,我希望我的问题很清楚:)
【问题讨论】:
标签: .net visual-studio-2010 c++-cli