2014-09-03 3 views
0

Я добавил элемент управления меткой в ​​конструктор form1 и присвоил ему некоторый текст. Затем я сделал ярлык мыши событие:Как я могу нарисовать прямоугольник вокруг элемента управления меткой?

private void label5_MouseClick(object sender, MouseEventArgs e) 
     { 
      DrawRectangleOnLabel = true; 
      label5.Invalidate(); 
     } 

И событие этикетки краска:

private void label5_Paint(object sender, PaintEventArgs e) 
     { 
      if (DrawRectangleOnLabel == true) 
      { 
       e.Graphics.DrawRectangle(Pens.Red, 0, 0, label5.Width, label5.Height); 
      } 
     } 

Но что я вижу, когда я нажимаю на этикетке половину прямоугольника только левый и верхний правый и нижняя часть прямоугольника не существует/показывается.

ответ

0

Это потому, что прямоугольник рисуется с шириной пера 1, а правая и нижняя части выпадают за пределы метки. Просто сделайте это один пиксель меньше:

e.Graphics.DrawRectangle(Pens.Red, 0, 0, label1.Width - 1, label1.Height - 1); 

В качестве альтернативы, вы можете использовать метод ControlPaint вместо:

ControlPaint.DrawBorder(e.Graphics, label1.DisplayRectangle, 
         Color.Red, ButtonBorderStyle.Solid); 

Это дает вам доступ к различным другим ButtonBorderStyle с (пунктирные, пунктирный, вставка, завязку).

0

Почему бы вам не попробовать BorderStyle недвижимость на MouseClick события. И назначьте одно событие для всех меток.

label1.MouseClick += new EventHandler(this.AllLable_MouseClick); 
label2.MouseClick += new EventHandler(this.AllLable_MouseClick); 
label3.MouseClick += new EventHandler(this.AllLable_MouseClick); 

private void AllLable_MouseClick(object sender, MouseEventArgs e) 
{ 
    Label lbl = (Label)sender; 
    if (lbl.BorderStyle == BorderStyle.FixedSingle) 
     lbl.BorderStyle = BorderStyle.None 
    else 
     lbl.BorderStyle = BorderStyle.FixedSingle 
} 
+0

'BorderStyle' делает черную рамку. Если вам нужен другой цвет, вы должны нарисовать его. –

+0

yup точно @J ... :) – Shell

Смежные вопросы