在设计时更改自定义控件默认文本属性(Change custom control default Te

2019-09-20 21:08发布

我创建了一个用户控制。 它基本上是一些自定义属性按钮。

public partial class CustomButton : Button {
    // My custom properties, constructor and events
}

每次我添加此CustomButton一个形式,它的默认Text值设置为“customButtonX”,其中X是1,2,3,...

我怎样才能改变这个价值? 我想它是“buttonX”(X = 1,2,3,...)。

编辑:我想招(或者不管它是我必须做的)是活跃的,当我通过设计视图中还添加了表单上的按钮。 含义当我拖放一个CustomButton从我的工具箱形式,它的Text值应该是“buttonX”。

Answer 1:

当您从工具箱中拖动控件到窗体有被触发的一些事件。 你的情况,你必须订阅,当你控制的Text属性是从的String.Empty更改为默认名称和更改被解雇的人。 要做到这一点,你必须得到该控件添加到窗体之前公开这些事件(IComponentChangeService的实施方案)服务。 这是可以做到覆盖控件的Site属性。 修改的例子,你可以找到在这里 ,这种代码应该工作:

    private IComponentChangeService _changeService;

    public override System.ComponentModel.ISite Site
    {
        get
        {
            return base.Site;
        }
        set
        {
            _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));
            if (_changeService != null)
                _changeService.ComponentChanged -= new ComponentChangedEventHandler(OnComponentChanged);
            base.Site = value;
            if (!DesignMode)
                return;
            _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));
            if (_changeService != null)
                _changeService.ComponentChanged += new ComponentChangedEventHandler(OnComponentChanged);
        }
    }

    private void OnComponentChanged(object sender, ComponentChangedEventArgs ce)
    {
        CustomButton aBtn = ce.Component as CustomButton;
        if (aBtn == null || !aBtn.DesignMode)
            return;
        if (((IComponent)ce.Component).Site == null || ce.Member == null || ce.Member.Name != "Text")
            return;
        if (aBtn.Text == aBtn.Name)
            aBtn.Text = aBtn.Name.Replace("customButton", "button");
    }


Answer 2:

默认值是“yourControlNameX”这就是正确的。 但是你可以在构造函数替换名称。

请注意,这只会在运行时的工作(在设计时)

public partial class CustomButton : Button {
    // My custom properties, constructor and events

    public CustomButton() 
    {  
         this.Text = this.Text.Replace("customButton ", "button");
    }
}


Answer 3:

只是覆盖任何你想进入它的文字和设置。

public partial class CustomButton  : Button {

    public override string Text
    {
        get
        {
            //return custom text
            return base.Text;
        }
        set
        {
            //modify value to suit your needs
            base.Text = value;
        }
    }
 }


Answer 4:

可能是你可以使用一个ControlDesigner和Text属性设置inizialized后。

public class MultiDesigner : ControlDesigner
{
    public MultiDesigner()
    {

    }

    public override void InitializeNewComponent(IDictionary defaultValues)
    {
        base.InitializeNewComponent(defaultValues);

        ICommonControl control = this.Component as ICommonControl;
        control.Text = control.Tag.ToString();
    }
}

装点您控制..

[Designer("MultiPuntoDeVenta.Controls.Tickets.Editors.Designer.MultiDesigner, MultiPuntoDeVenta.Controls")]
public class LabelBase<T> : KryptonLabel, ICommonControl where T : ICommonControl
{
.....


文章来源: Change custom control default Text property at design time