簡體   English   中英

創建Windows窗體控件(C ++)

[英]Creating a Windows Forms Control (C++)

嘗試在msdn上運行此基本表單控件示例

在“ 向控件添加自定義屬性 ”部分的步驟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();
             }

    };
}

由於使用的是Visual Studio .Net 2003,因此使用的是Managed 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的同時仍遵循為C ++ / CLI(Visual Studio 2005及更高版本)編寫的指南而感到困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM