因此,我在Visual C++ 2010中創建了Windows窗體應用程序,並且我想將一個事件添加到文本框中。當程序加載時,字母A被打印到屏幕上。當你輸入文本框時,該字母應該變成紅色。使用PaintEventHandler - Visual C++(Studio 2010)Windows窗體應用程序
文本框中的名稱是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事件函數,它允許我在程序加載後根據事件進行繪製?
感謝您的幫助,我希望我在我的問題:)
好吧,我明白了。事情是,我不想重新繪製控制本身,我想在窗口的不同部分繪製一個現有的紅色字母A.如何定義我想要繪製的字符串「A」的區域? – 2011-04-29 17:59:12
在'Paint'處理程序中,您可以繪製任何您想要的內容,並且會繪製控件。 – SLaks 2011-04-29 18:05:22
我真的不知道Invalidate()是如何工作的;下面有什麼Ive得到: 'code'public:系統:虛空Form1中:: AngleA_Enter(系統:對象^發件人,EventArgs^E) \t \t { \t \t \t長方形矩形; \t \t \t rectangle.X = 250; \t \t \t rectangle.Y = 120; \t \t \t rectangle.Width = 30; \t \t \t rectangle.Height = 30; \t \t \t Invalidate(rectangle); \t \t} 很顯然,這是遠不及我想要的。我如何使用invalidate()函數的方式來引用? – 2011-04-29 18:18:38