2009-10-19 27 views
0

試圖在msdn上運行this basic form control example創建Windows Forms控件(C++)

在部分「」的第1步中,要將自定義屬性添加到控件「,我們將ClickAnywhere代碼放在該類的公共部分中。

第一個錯誤:「錯誤C2144:語法錯誤:'bool'應該以';'開頭。

這個語法在C++中是否正確? (見下文)
(移除代碼ClickAnywhere部分,它編譯罰款...)

#pragma once 

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


namespace clickcounter 
{ 
    /// <summary> 
    /// Summary for clickcounterControl 
    /// </summary> 
    /// 
    /// 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. 
    public __gc class clickcounterControl : public System::Windows::Forms::UserControl 
    { 
    public: 



//Problem code***** 


property bool ClickAnywhere { //Is this syntax right in C++? 
    bool get() { 
     return (label1->Dock == DockStyle::Fill); 
    } 
    void set(bool val) { 
     if (val) 
      label1->Dock = DockStyle::Fill; 
     else 
      label1->Dock = DockStyle::None; 
    } 
} 
//End Problem code***** 


     clickcounterControl(void) 
     { 
      InitializeComponent(); 
     } 



    protected: 
     void Dispose(Boolean disposing) 
     { 
      if (disposing && components) 
      { 
       components->Dispose(); 
      } 
      __super::Dispose(disposing); 
     } 
    private: System::Windows::Forms::Label * label1; 

    private: 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     System::ComponentModel::Container* components; 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     void InitializeComponent(void) 
     { 
      this->label1 = new System::Windows::Forms::Label(); 
      this->SuspendLayout(); 
      // 
      // label1 
      // 
      this->label1->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle; 
      this->label1->Location = System::Drawing::Point(32, 40); 
      this->label1->Name = S"label1"; 
      this->label1->Size = System::Drawing::Size(30, 20); 
      this->label1->TabIndex = 0; 
      this->label1->Text = S"0"; 
      this->label1->TextAlign = System::Drawing::ContentAlignment::MiddleCenter; 
      this->label1->Click += new System::EventHandler(this, label1_Click); 
      // 
      // clickcounterControl 
      // 
      this->Controls->Add(this->label1); 
      this->Name = S"clickcounterControl"; 
      this->Size = System::Drawing::Size(100, 100); 
      this->ResumeLayout(false); 

     } 
    private: System::Void label1_Click(System::Object * sender, System::EventArgs * e) 
      { 
       int temp = System::Int32::Parse(label1->Text); 
       temp++; 
       label1->Text = temp.ToString(); 
      } 

    }; 
} 
+2

就像你被絆倒了由以下爲C++/CLI(Visual Studio 2005和更高版本)的書面指導爲了記錄,這是C++/CLR,而不是普通的C++。 – GManNickG

+0

這是事實。我是否需要配置不同的設置才能在Visual C++ .net 2003中編譯此設置? –

+0

可能。在CLR下啓動一個新項目,然後選擇Windows窗體應用程序。看看這是否能解決任何問題。 – GManNickG

回答

2

由於您使用Visual Studio .NET 2003,您使用的是託管C++,不是C++/CLI。語法存在顯着差異。對於屬性,您必須使用__property關鍵字,而不是C++/CLI property關鍵字及其新樣式。

因此,它應是:

__property bool get_ClickAnywhere() { 
    return (label1->Dock == DockStyle::Fill); 
} 
__property void set_ClickAnywhere(bool value) { 
    if (value) 
     label1->Dock = DockStyle::Fill; 
    else 
     label1->Dock = DockStyle::None; 
} 

看起來,同時仍然使用Visual Studio 2003