2009-10-19 29 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