【问题标题】:How can i draw a rectangle around a label control?如何在标签控件周围绘制矩形?
【发布时间】:2020-12-11 01:33:47
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    这是因为矩形是用笔宽为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);
    

    这使您可以访问各种其他ButtonBorderStyles(虚线、点线、插图、开头)。

    【讨论】:

      【解决方案2】:

      您为什么不在MouseClick 事件上尝试BorderStyle 属性。并为所有标签分配单个事件。

      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
      }
      

      【讨论】:

      • BorderStyle 制作黑色边框。如果你想要不同的颜色,你必须画出来。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多