首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置UITypeEditor的默认值

如何设置UITypeEditor的默认值
EN

Stack Overflow用户
提问于 2018-03-09 08:51:55
回答 1查看 148关注 0票数 0

我让一个自定义对象的这个属性显示在一个PropertyGrid中:

代码语言:javascript
复制
    [DisplayName("Dirección IP Local")]
    [Editor(typeof(Configuracion.Editors.IPAddressEditor), typeof(UITypeEditor))]
    [Description("Dirección IP del computador en el cual está conectado el dispositivo.")]
    public IPAddress IPLocal { get; set; }

在同一个类的构造函数中,我有:

代码语言:javascript
复制
this.IPLocal = Common.Helper.ProgramInfo.GetLocalIPAddresses().FirstOrDefault();

IPAddressEditor是这样的:

代码语言:javascript
复制
public class IPAddressEditor : UITypeEditor
{
    private IWindowsFormsEditorService _editorService;
    private IpAddressInput _ipAddressInput;
    private bool _escKeyPressed;

    public IPAddressEditor()
    {
        _ipAddressInput = new IpAddressInput();
        _ipAddressInput.Width = 150;
        _ipAddressInput.BackgroundStyle.BorderWidth = -1;
        _ipAddressInput.ButtonClear.Visible = true;
        _ipAddressInput.ValueChanged += _ipAddressInput_ValueChanged;
        _ipAddressInput.PreviewKeyDown += _ipAddressInput_PreviewKeyDown;
    }

    void _ipAddressInput_PreviewKeyDown(object sender, System.Windows.Forms.PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
            _escKeyPressed = true;
    }

    void _ipAddressInput_ValueChanged(object sender, EventArgs e)
    {
        if (_editorService != null)
            _editorService.CloseDropDown();
    }

    public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.DropDown;
    }

    public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        if (provider != null)
        {
            _editorService =
                provider.GetService(
                typeof(IWindowsFormsEditorService))
                as IWindowsFormsEditorService;
        }

        if (_editorService != null)
        {
            _escKeyPressed = false;

            _editorService.DropDownControl(_ipAddressInput);

            if (!_escKeyPressed)
            {
                IPAddress ip = IPAddress.None;
                if (IPAddress.TryParse(_ipAddressInput.Value, out ip))
                    return ip;
            }
        }

        return value;
    }
}

问题是编辑器内的控件(在本例中为_ipAddressInput)没有使用我在对象构造函数中分配的值进行初始化。

这是显而易见的,因为在类型编辑器构造函数中,我创建了一个新的IpAddressInput实例,所以问题是:初始化它的最佳方法是什么?

我在考虑为该变量创建一个公共设置器,并使用TypeDescriptor调用自定义对象的构造函数,但我认为这很棘手,

有没有更好的解决方案?

致敬詹姆

EN

回答 1

Stack Overflow用户

发布于 2018-03-09 23:02:38

最后,我找到了解决方案。

我刚添加了

代码语言:javascript
复制
_ipAddressInput.Text = value.ToString();

在调用之前

代码语言:javascript
复制
_editorService.DropDownControl(_ipAddressInput);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49184963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档