Вопрос

Я искал все утро, и, к сожалению, я не уверен, что такое Techincal Term для этой проблемы, поэтому я не могу найти резолюцию.

Когда я выхожу из Groupbox и переопределяю функцию OnPaint, Groupboxes перерывывают себя переоценивают предыдущие Groupbox. Ребенок управляет краской правильно, только Groupbox затронут ..

Screenshot

class ExtendedComponents
{
  public partial class extendedGroupBox : GroupBox
  {
    private Color borderColor;

    public extendedGroupBox()
    {
      this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ContainerControl, true);
      this.borderColor = Color.Black;
    }

    [NotifyParentProperty(true)]
    public Color BorderColor
    {
      get { return this.borderColor; }
      set { this.borderColor = value; Invalidate(); }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
      Size tSize = TextRenderer.MeasureText(this.Text, this.Font);

      Rectangle borderRect = e.ClipRectangle;
      borderRect.Y += tSize.Height / 2;
      borderRect.Height -= tSize.Height / 2;
      ControlPaint.DrawBorder(e.Graphics, borderRect, this.borderColor, ButtonBorderStyle.Dotted);

      Rectangle textRect = e.ClipRectangle;
      textRect.X += 6;
      textRect.Width = tSize.Width + 5;
      textRect.Height = tSize.Height;
      e.Graphics.FillRectangle(new SolidBrush(this.BackColor), textRect);
      e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), textRect);
    }
  }
}

Любая помощь приветствуется!

Это было полезно?

Решение

Легкий ответ- не использовать управление GroupBox- он по своей сути скатится.

Попробуйте вместо этого использовать управление панелью с помощью DoubleBuffer SetStyles и т. Д.

Для вашей текущей реализации не используйте e.ClipRectangle:

//Rectangle borderRect = e.ClipRectangle;
Rectangle borderRect = this.ClientRectangle;

//Rectangle textRect = e.ClipRectangle;
Rectangle textRect = this.ClientRectangle;

Другие советы

Еще одна вещь, которую следует отметить, это то, что вы должны отменять на платеж, чтобы избежать мерцания. Там вы либо ничего не делаете, либо рисуете цвет управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top