我正在用一些可以讓我更好地定製我的UI的東西來替換我的屬性網格。我在表單上放置了一個按鈕,我希望點擊該按鈕時會彈出一個CollectionEditor並允許我修改代碼。當我使用PropertyGrid時,我需要做的就是向指向我的CollectionEditor的屬性添加一些屬性,並且它工作正常。但是,我如何手動調用CollectionEditor?謝謝!有什麼方法可以在屬性網格之外使用CollectionEditor?
2
A
回答
10
在這裏找到了答案:http://www.devnewsgroups.net/windowsforms/t11948-collectioneditor.aspx
萬一上面鏈接網站消失的某一天,這裏是它的要點。但是,代碼是從上面的鏈接逐字記錄的;評論是我的。
假設你有一個帶有ListBox和一個按鈕的窗體。如果你想編輯使用CollectionEditor ListBox中的項目,你會做你的事件處理程序如下:
private void button1_Click(object sender, System.EventArgs e)
{
//listBox1 is the object containing the collection. Remember, if the collection
//belongs to the class you're editing, you can use this
//Items is the name of the property that is the collection you wish to edit.
PropertyDescriptor pd = TypeDescriptor.GetProperties(listBox1)["Items"];
UITypeEditor editor = (UITypeEditor)pd.GetEditor(typeof(UITypeEditor));
RuntimeServiceProvider serviceProvider = new RuntimeServiceProvider();
editor.EditValue(serviceProvider, serviceProvider, listBox1.Items);
}
現在,你需要做的下一件事就是創建RuntimeServiceProvider()。這是在上面的鏈接海報寫來實現此代碼:
public class RuntimeServiceProvider : IServiceProvider, ITypeDescriptorContext
{
#region IServiceProvider Members
object IServiceProvider.GetService(Type serviceType)
{
if (serviceType == typeof(IWindowsFormsEditorService))
{
return new WindowsFormsEditorService();
}
return null;
}
class WindowsFormsEditorService : IWindowsFormsEditorService
{
#region IWindowsFormsEditorService Members
public void DropDownControl(Control control)
{
}
public void CloseDropDown()
{
}
public System.Windows.Forms.DialogResult ShowDialog(Form dialog)
{
return dialog.ShowDialog();
}
#endregion
}
#endregion
#region ITypeDescriptorContext Members
public void OnComponentChanged()
{
}
public IContainer Container
{
get { return null; }
}
public bool OnComponentChanging()
{
return true; // true to keep changes, otherwise false
}
public object Instance
{
get { return null; }
}
public PropertyDescriptor PropertyDescriptor
{
get { return null; }
}
#endregion
}
1
因爲我不能發表評論,我會在這裏發佈這樣的:
您可以通過添加一個Click事件得到的DialogResult該CollectionEditor的okButton在WindowsFormsEditorService.ShowDialog
public System.Windows.Forms.DialogResult ShowDialog(Form dialog)
{
((System.Windows.Forms.Button)dialog.Controls.Find("okButton", true)[0]).Click += WindowsFormsEditorService_Click;
return dialog.ShowDialog();
}
...
private void WindowsFormsEditorService_Click(object sender, EventArgs e)
{
dr = DialogResult.OK;
}
相關問題
- 1. 有沒有什麼辦法可以在ScrollView之外使用SliverGrid?
- 2. 屬性setter沒有被CollectionEditor調用
- 3. 有什麼方法可以編輯Capture Pin的屬性嗎?
- 4. 有什麼方法可以讀取壓縮存檔的屬性?
- 5. 有什麼方法可以在Play商店之外下載應用程序?
- 6. Ruby on Rails:有什麼方法可以爲wiki系統使用嵌套屬性?
- 7. 默認情況下有什麼方法可以使用JavaScript屬性嗎?
- 8. 有什麼方法可以使用特殊功能與柵格?
- 9. 有什麼方法可以在成功之前調用?
- 10. 有沒有什麼方法可以使用'unset'作爲方法?
- 11. Java文本屬性文件:有什麼方法可以測試合法性嗎?
- 12. 爲什麼NgModelController屬性/方法以$
- 13. SASS:只有屬性可以嵌套在屬性中。爲什麼?
- 14. 爲什麼無法在對象方法之外創建對象屬性?
- 15. 有沒有什麼方法可以直接在標記上生成網格類
- 16. 爲什麼你可以從對象範圍之外調用私有方法?
- 17. 有沒有什麼可以嚴格的在Laravel的方法?
- 18. 有什麼方法可以將視圖稍微放在父級佈局之外?
- 19. 在wordpress之外使用類方法和屬性(functions.php)
- 20. 有什麼辦法可以在typescript中委託索引屬性?
- 21. 有什麼辦法可以在R中創建「脆弱」屬性?
- 22. 有沒有什麼方法可以在Harp.js中使用Jade塊?
- 23. 有什麼方法可以刪除只讀且不可配置的屬性?
- 24. 有什麼方法可以在Objective-C中獲取屬性類型?
- 25. 有什麼方法可以在DXL的對話框中顯示對象屬性?
- 26. 有什麼方法可以通過使用劍道網格創建這種類型的網格?
- 27. 爲什麼你可以使用方法
- 28. 除了使用ActiveX之外,有沒有什麼方法可以在javascript中讀取文本文件?
- 29. 有沒有什麼方法可以像html_safe一樣定義模型的屬性?
- 30. 有什麼方法可以在網站中找到未使用的CSS?
+1夢想家ic解決方案。似乎唯一的缺點是我看不到用戶是否按下了「取消」。我錯過了什麼嗎? – Brad 2013-03-29 11:43:09