我有一个自定义控件,我添加了一个Id
字符串属性。
当控件放在表单上时,我希望构造函数将其设置为Guid.NewGuid().ToString()
,但前提是它尚未设置。
当我从设计器手动编辑此属性时,它会向Designer.cs
文件添加一行代码。我怎么能以编程方式做到这一点?
具体来说,如何在自定义控件中执行此操作?
答案 0 :(得分:3)
我创建了适合您要求的示例用户控件。在这种情况下,“MyLabel”继承自Label。
首先创建包含MyLabel类的独立库,以下是此类的代码:
public class MyLabel: Label
{
public string ID { get; set; }
protected override void OnCreateControl()
{
base.OnCreateControl();
if (this.DesignMode && string.IsNullOrEmpty(this.ID))
{
this.ID = Guid.NewGuid().ToString();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.Text = this.ID;
}
}
如您所见,如果控件处于设计模式且尚未设置任何值,则我的控件具有已填充的ID属性。检查设计模式很重要,因此如果重新打开项目,价值不会改变。
覆盖OnPaint事件只是为了实时查看实际ID值,这不是必需的。
答案 1 :(得分:-1)
我相信你需要的是Properties.Settings
。请参阅MSDN page。
您可以在设计期间将这些设置为默认值,或在运行时加载和保存
示例:使用设计器,创建一个新的用户范围string[]
命名ID。然后在你的构造函数中,像这样
string ID = "";
if (Properties.Settings.Default.IDs!=null && Properties.Settings.Default.IDs.Length>0) {
ID = Properties.Settings.Default.IDs[0];
}
else {
ID = "random";
Properties.Settings.Default.IDs = new string[1];
Properties.Settings.Default.IDs[0] = ID;
Properties.Settings.Default.Save();
}
这将使用存储数组的第一个元素(如果有),或者如果没有则创建一个新字符串,并保留它(因此下次运行程序时将从设置中读取)