Раскрасить все границы с помощью ControlPaint.DrawBorder - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь немного покрасить элементы управления Winform через событие Paint, потому что почему бы и нет. Я подключил это, потому что StackOverlfow сказал мне, что это будет работать:

private void PaintLines(object sender, PaintEventArgs e)
{
    ControlPaint.DrawBorder(e.Graphics, ClientRectangle,
                    Color.Gray, 1, ButtonBorderStyle.Solid,
                    Color.Gray, 1, ButtonBorderStyle.Solid,
                    Color.Gray, 1, ButtonBorderStyle.Solid,
                    Color.Gray, 1, ButtonBorderStyle.Solid);
}

Проблема в том, что работает только для верхней и левой границ, а не для правой или нижней. Вот Designer.cs, потому что я подозреваю, что это проблема с тем, как установлен элемент управления.

this.lblOffset.AutoSize = true;
this.lblOffset.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblOffset.Location = new System.Drawing.Point(3, 25);
this.lblOffset.Name = "lblOffset";
this.lblOffset.Size = new System.Drawing.Size(114, 25);
this.lblOffset.TabIndex = 1;
this.lblOffset.Text = "Offset (V)";
this.lblOffset.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblOffset.Paint += new System.Windows.Forms.PaintEventHandler(PaintLines);

Итак, вопрос в том, как мне нарисовать мои четыре границы?

1 Ответ

0 голосов
/ 02 мая 2018

Вы используете неправильный ClientRectangle - один из всей формы. Таким образом, значения Width и Height этого прямоугольника не вписываются в клиентский прямоугольник Label.

Используйте Label ClientRectangle вместо:

ControlPaint.DrawBorder(e.Graphics, lblOffset.ClientRectangle,
    Color.Gray, 1, ButtonBorderStyle.Solid,
    Color.Gray, 1, ButtonBorderStyle.Solid,
    Color.Gray, 1, ButtonBorderStyle.Solid,
    Color.Gray, 1, ButtonBorderStyle.Solid);
...