gpt4 book ai didi

c# - 如何创建用于属性网格的自定义集合编辑器表单?

转载 作者:太空狗 更新时间:2023-10-29 18:15:20 26 4
gpt4 key购买 nike

我正在尝试将属性网格控件与一个类合并,该类具有另一个类的列表/集合作为属性之一。让我们称它们为 A 类,列表将包含 B 类以供引用。

我想合并一个有两个列表框的表单。左侧的列表框将包含我的程序中当前不在右侧列表中的所有 B 类的列表。右侧的列表将包含当前与 A 类相关联的所有 B 类。我希望中间的按钮可以在两个列表之间移动项目。

这很容易设计,但我不确定如何设置要用作集合编辑器的表单。

谁能指出我正确的方向?

此外,如果有人能指出我完成此操作的方向,我该如何为包含可供选择的 id 列表的属性设置下拉列表。

最佳答案

好吧,我终于找到了实现方法。

我正在尝试创建自定义 CollectionEditor.CollectionForm这与我需要做的很接近,但不是正确的方向。

首先,创建一个常规 Windows 窗体,其中包含用于编辑集合的 GUI。然后只需在表单中包含返回 DialogResult 的按钮。

现在完成我所寻找的关键不是 CollectionEditor.CollectionForm正如我所想的那样是正确的方法,而是一个 UITypeEditor .

因此,我创建了一个继承自 UITypeEditor 的类。然后你就可以简单地充实它:

public class CustomCollectionModalEditor: UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
if (context ==null || context.Instance == null)
return base.GetEditStyle(context);

return UITypeEditorEditStyle.Modal;
}

public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
IWindowsFormsEditorService editorService;

if (context == null || context.Instance == null || provider == null)
return value;

editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));

CForm CollectionEditor = new CForm();

if (editorService.ShowDialog(CollectionEditor) == System.Windows.Forms.DialogResult.OK)
return CollectionEditor.Programmed;

return value;
//return base.EditValue(context, provider, value);
}
}

要注意的关键部分是函数 GetEditStyleEditValue .负责启动您创建的用于编辑收藏的表单的部分位于 EditValue 中。覆盖功能。

CForm是我在本次测试中设计的用于编辑集合的自定义集合编辑器窗体。您需要获取 IWindowsFormsEditorServiceIServiceProvider 相关联并简单地调用 .ShowDialog(formVariable)IWindowsFormsEditorService为了显示您设计的编辑集合的形式。然后你可以 catch返回的 DialogResult从您的表单中获取值并执行您需要的任何自定义处理。

我希望这对某些人有所帮助,因为我花了很多时间来确定合并它的正确方法。

关于c# - 如何创建用于属性网格的自定义集合编辑器表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7530074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com