【问题标题】:User definded not set to Inherited label control用户定义未设置为继承标签控件
【发布时间】:2014-07-08 13:45:22
【问题描述】:

我在 c#.net 中创建了一个名为 MyLabel 的类,它具有基本标签(Windows 标签控件类)类。我添加了一个用户定义的属性,即

Format { get; set; }

在我放置 MyLabel 对象时的获胜表格上;我在 PropertyGrid 控件中获取 Format 属性,我可以更改它,但是在执行时我没有得到设置值,事实上总是得到默认值。

【问题讨论】:

  • 你在哪里/如何设置值?
  • 这是 wpf 吗?如果是这样,您将需要实现 INotifyPropertyChanged 并在 setter 中调用它
  • 什么是格式?它在哪里做任何事情?
  • 我正在从 propertygrid 设置值。它不在 wpf 中。它是字符串数据类型的属性名称。
  • 是的,但它的功能在哪里实现?这里它只是一个自动属性,它在哪里使用?

标签: c# inheritance


【解决方案1】:

看起来您想通过属性来格式化标签的文本。

好吧,你需要做更多的事情; 格式这个词是不行的..

这里有一种方法:它涉及到自己做标签的绘画,这很有指导意义,但也需要很多工作..

public partial class MyLabel : Label
{

  public MyLabel ()
  {
    //..
    Paint += MyLabel _Paint;
    Format = "{0}";
  }

  public string Format { get; set; }

  void MyLabel _Paint(object sender, PaintEventArgs e)
  {
     using (SolidBrush fBrush = new SolidBrush(this.ForeColor) )
     using (SolidBrush bBrush = new SolidBrush(this.BackColor) )
     { 
        if (Format == "") Format = "{0}";
        e.Graphics.FillRectangle(bBrush, this.ClientRectangle);
        string fs = string.Format(Format, Text);
        e.Graphics.DrawString(fs, this.Font, fBrush, new Point(Margin.Left, Margin.Top));
     }
  }
}

请注意,这实际上只是一个相当简单的实现。根据您希望 Label 表现的兼容性,您可能还需要实现 TextAlign、AutoSize 和 Label 的许多其他属性的功能。

也许您更愿意创建一个文本分配函数来分配已经格式化的文本?

public void SetText(string text)
{
    if (Format == "") Format = "{0}";
    Text = string.Format(Format, text);
}

【讨论】:

  • 没有。这里没有使用继承。实际上,当我放置自定义控件并尝试从 propertygrid 更改属性时,我没有得到该值。事实上,在 propertygrid 中它正在显示新的价值。
  • 什么意思没有使用继承??您的标题显示 Inherited label,如果您可以添加属性,则您必须继承它。还是您将属性添加到窗口?向我们展示更多真实代码!你所展示的甚至无法编译!
  • public class DataFormatField : Label { [Browsable(false)] public override string Text { get;放; } 私有字符串 _format = "&p"; [Browsable(true)] public string Format { get { return this._format; } 设置 { if (value != this._format) { this._format = value; } } } } 这是代码。
  • @Kamlesh 在您的代码中,format 属性当然会显示在属性窗口中,但是您的 CUSTOM PROPERTY 根本没有用于更改某些内容的地方。就像您创建放置的事件一样它将调用侦听器列表但您没有在任何地方引发事件的方法...
  • 我仍然不确定您想做什么,也不确定您的问题是什么。请澄清!如果我将其添加到按钮单击:button1.Text = dataFormatField1.Format;属性网格中设置的格式显示就好了。你想通过覆盖文本来实现什么??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2013-03-10
  • 2012-12-17
  • 1970-01-01
相关资源
最近更新 更多