2011-04-29 5 views
0

Visual C++ 2010에서 Windows Forms 응용 프로그램을 만들고 텍스트 상자에 이벤트를 추가하려고합니다. 프로그램이로드되면 문자 A가 화면에 인쇄됩니다. 텍스트 상자를 입력하면 글자가 빨간색으로 변합니다.PaintEventHandler 사용 - Visual C++ (Studio 2010) Windows Forms 응용 프로그램

텍스트 상자의 이름은 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 이벤트로 프로그램을 만들 때마다 다음 오류가 발생합니다.

Form1 개체 (Windows Forms 응용 프로그램에서 클래스의 기본 이름)는 PaintEventHandler가 아닌 "this-> AngleA-> Enter + = gcnew"에 대한 EventHandler 매개 변수 만 받아 들일 수 있지만 그 이유는 알 수 없습니다. 이벤트를 기반으로 프로그램이 이미로드 된 후 페인트 할 수있는 Enter 이벤트 함수를 만드는 방법이 있습니까? 도움을

덕분에, 나는 당신 만 Paint 이벤트에 PaintEventHandler을 추가 할 수 있습니다 내 질문 :

답변

0

에서 명확했다 희망; Enter 이벤트가 아닙니다.

EventHandler 이벤트를 Enter 이벤트에 추가하고 처리기에서 Invalidate()을 호출 할 수 있습니다.

+0

알겠습니다. 문제는 컨트롤 자체를 다시 그려야한다는 것입니다. 창문의 다른 부분에있는 기존 문자 위에 빨간색 문자 A를 칠하고 싶습니다. 어떻게 칠할 문자열 "A"의 영역을 정의 할 수 있습니까? –

+0

'Paint' 핸들러에서 원하는 것을 그릴 수 있으며 컨트롤 위에 그릴 것입니다. – SLaks

+0

저는 실제로 Invalidate()가 어떻게 작동하는지 알지 못합니다. Heres는 필자가 무엇을 가지고 : 'code'public : 시스템 :: 무효를 Form1 :: AngleA_Enter (시스템 :: 객체^보낸 사람, EventArgs입니다^전자) \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 무효화 (사각형); \t \t} 분명히 이것은 내가 원하는 것과는 거리가 멀다. 어떻게 당신이 참조하는 방식으로 invalidate() 함수를 사용합니까? –

관련 문제