views:

113

answers:

1

trying to run this basic form control example on msdn.

At step 1 of the portion "To add a custom property to a control" we place the ClickAnywhere code in the public section of the class.

First error: "error C2144: syntax error : 'bool' should be preceded by ';'"

Is this syntax correct in C++? (see below)
(removing the ClickAnywhere portion of code, it compiles fine...)

#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  A: 

Since you are using Visual Studio .Net 2003, you are using Managed C++, not C++/CLI. There is a significant difference in syntax. For a property, you must use the __property keyword, not the C++/CLI property keyword and its new style.

It should therefore be:

__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;
}

It looks like you are being tripped up by following a guide written for C++/CLI (Visual Studio 2005 and later) while still using Visual Studio 2003.

GBegen