Как я могу добавить новое существующее свойство в свой элемент управления? - PullRequest
0 голосов
/ 19 января 2012

У меня есть собственный контроль:

public class newControl : Control
{
}

Существует свойство Text, но нет свойства TextAlign. Например, мне нужно это свойство, подобное свойству TextAlign Button, но я не хочу наследовать его от класса кнопки.

Так я могу наследовать только TextAlign свойство? Если да, то как?

Ответы [ 3 ]

3 голосов
/ 19 января 2012

Да, вы можете просто добавить его. Встроенное перечисление называется ContentAlignment:

using System.ComponentModel;
using System.Windows.Forms;

public class newControl : Control {

  private ContentAlignment _TextAlign = ContentAlignment.MiddleCenter;

  [Description("The alignment of the text that will be displayed on the control.")]
  [DefaultValue(typeof(ContentAlignment), "MiddleCenter")]
  public ContentAlignment TextAlign {
    get { return _TextAlign; }
    set { _TextAlign = value; }
  }
}

То, что вы делаете с этим свойством, теперь зависит от вас.

Обратите внимание, что я добавил некоторые атрибуты для использования элемента управления в PropertyGrid. Атрибут DefaultValue не устанавливает значение свойства, он просто определяет, будет ли свойство выделено жирным шрифтом или нет.

Чтобы отобразить текст с использованием свойства TextAlign, вам необходимо переопределить метод OnPaint и нарисовать его:

protected override void OnPaint(PaintEventArgs e) {
  switch (_TextAlign) {
    case ContentAlignment.MiddleCenter: {
        TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, Color.Empty, 
                              TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
        break;
      }
    case ContentAlignment.MiddleLeft: {
        TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, Color.Empty,
                              TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
        break;
      }
    // more case statements here for all alignments, etc.

  }
  base.OnPaint(e);
}
0 голосов
/ 19 января 2012

Во-первых, рассмотрите возможность наследования от System.Web.UI.WebControls.WebControl , который имеет больше свойств, соответствующих стилю, таких как CssClass и Attributes.

Вместо того, чтобы использовать свойство TextAlign, я бы рекомендовал просто добавить класс CSS на свою страницу и использовать свойство set CssClass, которое находится в базовом классе WebControl.

Кроме того, вы можете установить выравнивание текста, выполнив следующее (но CSS-класс будет чище):

this.Attributes["style"] = "text-align: center";

Конечно, вы всегда можете добавить свое собственное свойство, которое записывает правильный CSS, также в коллекцию Attributes.

0 голосов
/ 19 января 2012

аааа я думаю вообще нету и чувак это невозможно. Вы не можете наследовать свойство: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...