6143
23977
我有一個自定義用戶控件,我希望從設計器中設置其某些屬性。這些屬性將來自結構。這是當前代碼
私有fooList作為Foo_structure
公共結構Foo_structure
公共財產作為整數
公共財產b為整數
公共財產c作為額外費用
末端結構
公共結構附加
公有財產精度(整數)
公共財產輕如弦
末端結構
公共屬性foo作為Foo_structure
得到
返回fooList
結束獲取
設置(ByVal值作為Foo_structure)
fooList =值
端套
最終財產
我需要能夠從設計器屬性面板中設置Foo_structure的屬性,例如下圖所示。 
您將需要一個TypeConverter來將foo折疊為一個字符串。並從中轉換回來。嵌套的類型意味著您需要為Extras編寫另一個。您可能需要使用一些屬性來處理設計器持久性。
首先,我認為您至少需要將Foo_structure更改為Class,否則無法將代碼添加到實例Extras(也無法創建Foo實例)。這應該使您入門(更改了一些名稱):
'Foo轉換為Class:

公共類FooBar


Foo作為整數


公共屬性欄為整數



公共財產作為額外費用
Public Sub New(a1作為整數,b2作為整數)
Foo = a1
棒= b2
例如,Ex = New Extras不想飛來飛去
結束子
末級
DefaultValue不會執行您可能認為的操作。噹噹前值不等於默認值時,它告訴IDE序列化屬性的值。 DesignerSerializationVisibility告訴VS保存屬性的值。 Foo和Bar都需要這些。
附加/不同。 NotifyParentProperty允許在Extra屬性值發生更改時通知FooBar,以便更新IDE窗口,設置內部“ DirtyFlag”等; DesignerSerializationVisibility.Content告訴VS,我們知道我們無法將Ex保存為值,因此請保存內容。
然後是FooItemConverter。這將是在“ Props”窗口中顯示所需字符串並從該字符串創建Foo項的內容:
朋友類FooItemConverter
繼承ExpandableObjectConverter
'告訴IDE它可以處理哪些轉換:
公共重寫函數CanConvertTo(context作為ITypeDescriptorContext,
destType作為類型)作為布爾值
如果destType = GetType(String)然後
' 我可以
返回真
萬一
'可能還必須對InstanceDescriptor說是
返回MyBase.CanConvertTo(context,destType)
結束功能
之後,使用ConvertTo函數將foo轉換為字符串。像這樣:
公共重寫函數ConvertTo(context為ITypeDescriptorContext,
文化作為Globalization.CultureInfo,
值作為對象,destType作為類型)作為對象
如果destType = GetType(String)然後
作為FooBar的Dim f = CType(值,FooBar)
返回String.Format(“ {0},{1},{2}”,
f.foo.ToString,
f.bar.ToString,
f.Ex.ToString)
'輸出:X,Y,
'其中Ex是我們在ExtraItemConverter中使用的
萬一
返回MyBase.ConvertTo(context,destType)
結束功能
如果ExtraItemConverter.ConvertTo使用“({{0} / {1})”格式,則控件內容將顯示為:F,B,(P / L),其中F = Foo,B = Bar等。
若要使其工作,您需要4個過程:CanConvertTo,ConvertTo,CanConvertFrom,ConvertFrom所有對字符串的響應。您可能僅可以使用屬性進行持久化。
FooItemConverter.ConvertFrom必須知道如何從該字符串創建對象。通常,這樣做是這樣的:
'解析您創建的字符串並創建一個Foo
Dim els As String()= str.Split(“,” c)
返回新的myFoo(Convert.ToInt32(els(0)),Convert.ToInt32(els(1)))
請注意,第3個元素被忽略,因為這實際上是ExtraItemConverter要處理的元素。該轉換器將非常相似。
因此,您首先必須決定是堅持使用結構還是使用類(Class的另一個優點是,發現的示例中99.999%的示例都是基於Class的)。這些傢伙對TypeConverters有很多了解。
|
你的答案
StackExchange.ifUsing(“ editor”,function(){
StackExchange.using(“ externalEditor”,function(){
StackExchange.using(“ snippets”,function(){
StackExchange.snippets.init();
});
});
},“代碼段”);
StackExchange.ready(function(){
var channelOptions = {
標籤:“” .split(“”),
id:“ 1”
};
initTagRenderer(“”。split(“”),“” .split(“”),channelOptions);
StackExchange.using(“ externalEditor”,function(){
//如果啟用了摘要,則必須在摘要後觸發編輯器
如果(StackExchange.settings.snippets.snippetsEnabled){
StackExchange.using(“ snippets”,function(){
createEditor();
});
}
其他{
createEditor();
}
});
函數createEditor(){
StackExchange.prepareEditor({
useStacksEditor:否,
heartbeatType:“答案”,
autoActivateHeartbeat:否,
convertImagesToLinks:是,
noModals:是的,
showLowRepImageUploadWarning:是的,
聲望:ToPostImages:10,
bindNavPrevention:正確,
後綴:“”,
imageUploader:{
brandingHtml:“採用\ u003ca href = \“ https://imgur.com/ \” \ u003e \ u003csvg class = \“ svg-icon \” width = \“ 50 \” height = \“ 18 \” viewBox = \“ 0 0 50 18 \” fill = \“ none \” xmlns = \“ http://www.w3.org/2000/svg \” \ u003e \ u003cpath d =“ \ M46.1709 9.17788C46.1709 8.2645446.2665 7.94324 47.1084 7.58816C47.4091 7.46349 47.7169 7.36433 48.0099 7.26993C48.9099 6.97997 49.672 6.73443 49.672 5.93063C49.672 5.22043 48.9832 4.61182 48.1414 4.61182C47.4335 4.61182 46.7256 4.91628 46.0943 5.50789C45.74.6 4.313.6412 4.313.6662 43.1481 6.59048V11.9512C43.1481 13.2535 43.6264 13.8962 44.6595 13.8962C45.6924 13.8962 46.1709 13.2535 46.1709 11.9512V9.17788Z \“ / \ u003e \ u003cpath d = \” M32.492 10.1419C32.492 12.6954 34.1182 14.048437.0451 14.0484 41.5985 12.6954 41.5985 10.1419V6.59049C41.5985 5.28821 41.1394 4.66232 40.1061 4.66232C39.0732 4.66232 38.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.5455 37.0451 11.5455C35.8209 11.5455 35.4954 10.8521 35.4954 4.214.03.64.044.9214.06.36.536.49544.024.03 4.95434.0954 4.654.​​9216.56.4 C32.9703 4.66232 32.492 5.28821 32.492 6.59049V10.1419Z \“ / \ u003e \ u003cpath fill-rule = \” evenodd \“ clip-rule = \” evenodd \“ d = \” M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 3 0.2537 15.6379C30.8468 14.7755 30.9615 13.5579 30.9615 11.9512V6.59049C30.9615 5.28821 30.4833 4.66231 29.4502 4.66231C28.9913 4.66231 28.4555 4.94978 28.1109 5.50789C27.499 4.86533 26.7335 4.56087 25.7005 4.56087C23.1369 4.56087 21.01346.7985 3。 25.3754 13.913C26.5612 13.913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.121 12.8346C28.1256 12.8854 28.1301 12.9342 28.1301 12.983C28.1301 14.4373 27.2502 15.2321 25.777 15.2321C24.8349 15.2321 24.1352 14.9821 23.218 C21.7977 14.5218 21.2429 15.0123 21.2429 15.6887C21.2429 16.7375 22.9072 17.6335 25.6622 17.6335ZM24.1317 9.27932C24.1317 7.94324 24.9928 7.09766 26.1024 7.09766C27.2119 7.09766 28.0918 7.94324 28.0918 9.27932C28.0918 10.6321 27.23111.5116116 24.1317 9.27932Z \“ / \ u003e \ u003cpath d =” \ M16.8045 11.9512C16.8045 13.2535 17.2637 13.8962 18.2965 13.8962C19.3298 13.8962 19.8079 13.2535 19.8079 11.9512V8.12928C19.8079 5.82936 18.4879 4.62866 16.4027 4.62866C15.1594 4.62866 14.279 4.98375 13.3609 5.88013C12.653 5.05154 11.6581 4.62866 10.3573 4.62866C9.34336 4.62866 8.57809 4.89931 7.9466 5.5079C7.53506 4.637 5.00066 5.28821 5.00066 6.59049V11.9512C5.00066 13.2535 5.47873 13.8962 6.51203 13.8962C7.54479 13.8962 8.0232 13.2535 8.0232 11.9512V8.90741C8.0232 7.58817 8.44431 6.91179 9.53458 6.91179C10.5104 6.91179 10.893 7.58817 10.893 8.94108113.86.8 C13.4375 13.8962 13.9157 13.2535 13.9157 11.9512V8.90741C13.9157 7.58817 14.3365 6.91179 15.4269 6.91179C16.4027 6.91179 16.8045 7.58817 16.8045 8.94108V11.9512Z \“ / \ u003e \ u003cpath d = \” M3.31675 6.59049C3.31675 5.28821 1.82471 4.66232C0.791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13.2535 0.791758 13.8962 1.82471 13.8962C2.85798 13.8962 3.31675 13.2535 3.31675 11.9512V6.59049Z u003e \ u003cpath d = \“ M1.87209 0.400291C0.843612 0.400291 0 1.1159 0 1.98861C0 2.87869 0.822846 3.57676 1.87209 3.57676C2.90056 3.57676 3.7234 2.87869 3.7234 1.98861C3.7234 1.1159 2.90056 0.400291 1.87209 0.400291Z \” fill = \“#1BB \“ / \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e”,
contentPolicyHtml:“根據\ u003ca href = \“ https://stackoverflow.com/help/licensing \” \ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \“ https://stackoverflow.com獲得許可的用戶貢獻/ legal / content-policy \“ \ u003e(內容策略)\ u003c / a \ u003e”,
allowUrls:是
},
onDemand:是的,
dispatchSelector:“。discard-answer”
,立即顯示MarkdownHelp:true,enableTables:true,enableSnippets:true
});
}
});
感謝您為Stack Overflow提供答案!
請務必回答問題。提供詳細信息並分享您的研究!
但是要避免...
尋求幫助,澄清或回答其他答案。
根據意見發表聲明;用參考或個人經驗來備份它們。
要了解更多信息,請參閱有關編寫出色答案的提示。
草稿已保存
草稿丟棄
註冊或登錄
StackExchange.ready(function(){
StackExchange.helpers.onClickDraftSave('#login-link');
});
使用Google註冊
使用Facebook註冊
使用電子郵件和密碼註冊
提交
以訪客身份發布
名稱
電子郵件
必需,但從未顯示
StackExchange.ready(
函數(){
StackExchange.openid.initPostLogin('。new-post-login','https%3a%2f%2fstackoverflow.com%2fquestions%2f24241527%2fvb-net-setting-properties-of-user-control%23new-answer','問題頁面”);
}
);
以訪客身份發布
名稱
電子郵件
必需,但從未顯示
發表您的答案
丟棄
點擊“發布答案”,即表示您同意我們的服務條款,隱私政策和Cookie政策
不是您要找的答案?瀏覽標記為vb.net屬性的其他問題,或詢問您自己的問題。