我创建了一个用户控件。它基本上是一个带有一些自定义属性的按钮。
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 ”。
答案 0 :(得分:4)
默认为“yourControlNameX”,这是正确的。但是您可以在构造函数中替换名称。
请注意,这仅适用于运行时(非设计时)
public partial class CustomButton : Button {
// My custom properties, constructor and events
public CustomButton()
{
this.Text = this.Text.Replace("customButton ", "button");
}
}
答案 1 :(得分:2)
将控件从“工具箱”拖动到表单时,会触发一些事件。在您的情况下,您必须订阅当控件的text属性从String.Empty更改为默认名称并更改它时触发的那个。为此,您必须在将控件添加到表单之前获取公开这些事件的服务(IComponentChangeService的实现)。这可以覆盖控件的Site属性。修改您可以找到here的示例,这种代码应该有效:
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");
}
答案 2 :(得分:1)
只需覆盖文本并设置您想要的任何内容。
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;
}
}
}
答案 3 :(得分:0)
可能是你可以使用ControlDesigner并在inizialized后设置Text属性。
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
{
.....