我使用 C# Windows 窗体控件库和代码开发了一个复合控件,如下所示:
public partial class MyControl : UserControl
{
public event EventHandler NameChanged;
protected virtual void OnNameChanged()
{
EventHandler handler = NameChanged;
if (handler != null) handler(this, EventArgs.Empty);
}
private void WhenNameChanged(object sender , EventArgs e)
{
this.myGroupBox.Text = this.Name;
}
protected override void OnCreateControl()
{
base.OnCreateControl();
IComponentChangeService changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));
if (changeService == null) return; // not provided at runtime, only design mode
changeService.ComponentChanged -= OnComponentChanged; // to avoid multiple subscriptions
changeService.ComponentChanged += OnComponentChanged;
}
private void OnComponentChanged(object sender, ComponentChangedEventArgs e)
{
if(e.Component == this && e.Member.Name == "Name")
{
OnNameChanged();
}
}
public MyControl()
{
InitializeComponent();
this.NameChanged += new EventHandler(this.WhenNameChanged);
}
}
MyControl
唯一有一个控件GroupBox
名为myGroupBox
private System.Windows.Forms.GroupBox myGroupBox;
我有一个测试程序,它是一个 C# Windows 窗体应用程序,我想看看当我myGroupBox
在属性窗口中更改名称时,文本myGroupBox
将是我输入的名称。所以我在属性窗口中输入了一个名称Value
,myGroupBox
文本将在设计器中更改,这是屏幕截图:
但是当我重建测试程序或在运行时文本myGroupBox
会消失,这里是截图:
我应该如何处理我的代码?谢谢