1
中的屬性「名稱」我想實現Component
中的屬性Name
,該值與表單中指向組件的字段名稱具有相同的值。С#WinForms。實現組件
private MyComponent myComponent1;
this.myComponent1.Name = "myComponent1";
的WinForms已經Control
類實現這樣的屬性,但我不明白它是如何工作的。
private System.Windows.Forms.Button button1;
this.button1.Name = "button1";
我想在MyComponentDesigner中聲明私有字符串Name屬性。 或在IComponentChangeService服務中使用ComponentRename事件。 探索WinForms的源代碼並沒有給出確切的解釋。
謝謝你Reza。 它按預期工作。 屬性名稱由指向myComponent的字段的名稱分配。 但是,你能解釋一下爲什麼這會起作用,或者給出一個解釋它的鏈接。 對我來說,它看起來像一個魔法代碼。 我試圖通過調試devenv.exe來調試Names.Set方法。但似乎Names.Set從未在設計時被調用過。 – DmitryB
不客氣:) Windows窗體中的實現基於'Control'的'Name'屬性,'Control'的'Name'屬性和'ControlDesigner'的'PrefilterProperties'方法。我沒有嘗試實現整個模式,但試圖提供一個更簡單的實現,爲我工作。在我的實現中,private'name'字段可以幫助你的組件在運行時擁有名字(如果你可以創建Component而不將容器傳遞給它的構造函數)。同樣設置「Site.Name」可以使設計時所需的行爲與Control類具有相同的行爲。 –
它變得更加清晰,但並不完全。 主要工作是在Name.get方法中完成的。 當VS在代碼 中實現Name方法並從Name屬性獲取值時。 在設計時的網站! = null,那麼代碼名稱= Site.Name將起作用; Site.Name是指向組件的字段的實際屬性名稱。 因此,代碼將被寫下 this.myComponent1.Name = VS.myComponent1.Name.get(return Site.Name)=「myComponent1」; – DmitryB