【发布时间】:2020-10-24 07:38:26
【问题描述】:
首先:问题的措辞可能不准确,对此深表歉意。实际问题在所有代码 sn-ps 下方。
第二:代码是C#,但我通常用VB.NET写代码。
我有一个类LabelData,其中包含用户绘制标签的视觉外观数据。简短的例子:
public class LabelData
{
public Color BackColor1 { get; set; }
public Color BackColor2 { get; set; }
public Color TextColor { get; set; }
public int TextAngle { get; set; }
public string Text { get; set; }
}
我的UserControl 使用LabelData 绘制了大量文本(我们称它们为小标签)。它看起来像这样(简化):
public class UserControl1
{
public LabelData Title { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
// draw title here
LabelData currentLabel;
for (int i = 0; i <= 9; i++)
{
currentLabel = new LabelData();
currentLabel.BackColor1 = Color.Green;
currentLabel.BackColor2 = Color.YellowGreen;
currentLabel.TextAngle = 0;
currentLabel.Text = "Element" + i.ToString();
// draw text here
}
}
}
小标签的所有数据都在OnPaint 中定义。我不想要这个。我想到了一个用于像DataGridViewRowTemplate 这样的较小标签的模板。这也允许我为LabelData 实现ICloneable。
这将变为:
public class UserControl1
{
public LabelData Title { get; set; }
public LabelData LabelTemplate { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
LabelData currentLabel;
for (int i = 0; i <= 9; i++)
{
currentLabel = LabelTemplate.Clone();
currentLabel.Text = "Element" + i.ToString();
}
}
}
现在的问题:如何删除PropertyGrid 中LabelTemplate 属性(但不是Title 属性)的Text-Property,因为此属性在OnPaint 反正?
PS:我尝试创建自定义设计器并覆盖 PreFilterProperties 以删除 Text 属性,但我无法将 DesignerAttribute 添加到 LabelTemplate 属性。
【问题讨论】:
标签: c# .net vb.net winforms uitypeeditor