我如何创建一个模态UITypeEditor的字符串属性
本文关键字:属性 模态 UITypeEditor 一个 字符串 何创建 创建 | 更新日期: 2023-09-27 18:17:16
我有一个属性,它被存储为字符串,并通过PropertyGrid进行编辑,它被保存为一组逗号分隔的值,例如ABC, DEF, GHI。我的用户可以直接编辑字符串,但这些值来自一个封闭的值集。因此,从列表中进行选择对他们来说更容易、更安全。
我写了一个简单的自定义UITypeEditor基于优秀的答案在这里
我也看了这篇文章,但我真的不明白它可能与我的问题有关。8 - (
我设置了一个简单的表单,允许用户从列表中选择,并将选择的值添加到要返回的值中。我的问题是值没有被返回。我想知道这是否与字符串的不变性有关。然而,这可能是我正在做的简单而愚蠢的事情。
下面是我根据Marc的回答编写的类型编辑器代码:
public class AirlineCodesEditor : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
var svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
var codes = value as string;
if (svc != null && codes != null)
{
using (var form = new AirlineCodesEditorGUI())
{
form.Value = codes;
if (svc.ShowDialog(form) == DialogResult.OK)
{
codes = form.Value; // update object
}
}
}
return value; // can also replace the wrapper object here
}
}
这个表单对于我的测试来说是微不足道的,我只是用一些新的值编辑了文本框:
public partial class AirlineCodesEditorGUI : Form
{
public AirlineCodesEditorGUI()
{
InitializeComponent();
}
public string Value {
get
{
return airlineCodes.Text;
}
set
{
airlineCodes.Text = value;
}
}
private void OnCloseButtonClick(object sender, System.EventArgs e)
{
DialogResult = DialogResult.OK;
Close();
}
}
也许有人能把我从痛苦中解救出来。
您只需要从表单返回值,像这样:
if (svc.ShowDialog(form) == DialogResult.OK)
{
value = form.Value;
}