如何在标签控件周围绘制一个矩形?

时间:2014-09-03 02:17:16

标签: c# .net winforms

我为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);
            }
        }

但是,当我点击标签时,我看到的是半矩形,只有左边和上边缘,矩形的右边和底部不存在/显示。

3 个答案:

答案 0 :(得分: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(虚线,点线,插图,开头)。

答案 1 :(得分: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
}

答案 2 :(得分:0)

对于一个简单的“盒子”,只需添加一个Forms.Panel并将控件放在上面即可。然后将面板边框设置为FixedSingle。