2012-11-06 104 views
0

我需要在單擊按鈕時創建矩形。 我已經嘗試了給定的代碼,但它不工作。 我試圖創建一個標誌「mdraw」,當點擊一個按鈕時變成true。 form_paint中只有當「mdraw」變爲true時纔會創建矩形。但點擊按鈕後,什麼都沒有!在按鈕上繪圖單擊 - Visual C++

我使用Windows窗體應用程序(CLR)。 微軟的Visual C++ 2008

#pragma once 


    namespace try1 { 

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 

/// <summary> 
/// Summary for Form1 
/// 
/// WARNING: If you change the name of this class, you will need to change the 
///   'Resource File Name' property for the managed resource compiler tool 
///   associated with all .resx files this class depends on. Otherwise, 
///   the designers will not be able to interact properly with localized 
///   resources associated with this form. 
/// </summary> 
public ref class Form1 : public System::Windows::Forms::Form 
{ 
public: 
    Form1(void) 
    { 
     InitializeComponent(); 
     // 
     //TODO: Add the constructor code here 
     // 
    } 

protected: 
    /// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    ~Form1() 
    { 
     if (components) 
     { 
      delete components; 
     } 
    } 
private: System::Windows::Forms::Button^ button1; 
protected: 

private: 
    /// <summary> 
    /// Required designer variable. 
    /// </summary> 
    System::ComponentModel::Container ^components; 
private: System::Windows::Forms::Label^ label1; 
public: 
    bool mdraw; 
    #pragma region Windows Form Designer generated code 
    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor. 
    /// </summary> 
    void InitializeComponent(void) 
    { 
     this->button1 = (gcnew System::Windows::Forms::Button()); 
     this->label1 = (gcnew System::Windows::Forms::Label()); 
     this->SuspendLayout(); 
     // 
     // button1 
     // 
     this->button1->Location = System::Drawing::Point(98, 35); 
     this->button1->Name = L"button1"; 
     this->button1->Size = System::Drawing::Size(75, 23); 
     this->button1->TabIndex = 0; 
     this->button1->Text = L"button1"; 
     this->button1->UseVisualStyleBackColor = true; 
     this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); 
     // 
     // label1 
     // 
     this->label1->AutoSize = true; 
     this->label1->Location = System::Drawing::Point(51, 77); 
     this->label1->Name = L"label1"; 
     this->label1->Size = System::Drawing::Size(0, 13); 
     this->label1->TabIndex = 1; 
     // 
     // Form1 
     // 
     this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 
     this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 
     this->ClientSize = System::Drawing::Size(284, 262); 
     this->Controls->Add(this->label1); 
     this->Controls->Add(this->button1); 
     this->Name = L"Form1"; 
     this->Text = L"Form1"; 
     this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); 
     this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint); 
     this->ResumeLayout(false); 
     this->PerformLayout(); 

    } 
    #pragma endregion 
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)    { 
      mdraw=true; 
      label1->Text=button1->Text; 

     } 

private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { 
      Pen^ redPen = gcnew Pen(Color::Red); 
     int i,n; 
     i=20; 
     n=0; 

     if(mdraw) 
     { 
         while(n<=50) 
     { 
      e->Graphics->DrawRectangle(redPen,i,140,10,60); 
      i=i+20; 
      n+=1; 

     } 




     } 
    } 


    }; 
    } 

回答

0

使用如下 首先初始化mdraw

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
{ 
    if(!mdraw) 
    { 
     while(n<=50) 
     { 
     mdraw=true; 
     label1->Text=button1->Text; 
     e->Graphics->DrawRectangle(redPen,i,140,10,60); 
     i=i+20; 
     n+=1; 
     } 
    } 

} 
+0

button_click方法圖形事件使mdraw真實,然後我想繪製矩形 –

+0

調用那個onclick函數中的代碼 while(n <= 50) e-> Graphics-> DrawRectangle(redPen,i,140,10,60); i = i + 20; n + = 1; } – Akhil

+0

給出使用e –

0

按鈕E事件沒有,這就是爲什麼顯示錯誤