gpt4 book ai didi

c# - 更改 WinForms 控件的边框颜色和外观

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:01 29 4
gpt4 key购买 nike

当用户将鼠标悬停在标签上时,它会向标签添加一个top-borderbottom-border

类似的东西:http://ianlunn.github.io/Hover/ ->边界过渡-> 从中心开始下划线。

但是,我只知道如何定义普通边框。我什至无法更改边框的颜色、他的宽度等等...

这是我到目前为止取得的成就:

designer.cs:

this.label1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.label1.Font = new System.Drawing.Font("Arial", 16F, System.Drawing.FontStyle.Bold);
this.label1.Location = new System.Drawing.Point(124, 187);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(217, 65);
this.label1.TabIndex = 0;
this.label1.Text = "Something Cool";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.label1.MouseHover += new System.EventHandler(this.label1_MouseHover);
this.label1.MouseLeave += new System.EventHandler(this.label1_MouseLeave);

CS:

private void label1_MouseHover(object sender, EventArgs e)
{
label1.BorderStyle = BorderStyle.FixedSingle;
label1.Font = new Font("Arial", 18, FontStyle.Bold);
}

private void label1_MouseLeave(object sender, EventArgs e)
{
// initialize
label1.BorderStyle = BorderStyle.None;
label1.Font = new Font("Arial", 16, FontStyle.Bold);
}

最佳答案

首先我建议您使用 label1_MouseEnter() 事件而不是 label1_MouseHover() 事件。由于悬停事件在您悬停 label1 时不断触发。这是不必要的,因为当您输入标签时,您将更改 label1 的外观,一旦您离开标签,将其更改回默认标签。所以 MouseEnter() 是您的首选。

我们将定义一个 bool 变量来检查是否在 label1 周围绘制了环绕边框壳。我们在 MouseEnter()MouseLeave() 事件中更改它的值。

bool changeBorder;

在这些事件中,我们将调用 label1.Refresh(),它会重绘控件,因此会触发 Paint() 事件。

private void label1_MouseEnter(object sender, EventArgs e)
{
changeBorder = true;
label1.Refresh();
}

private void label1_MouseLeave(object sender, EventArgs e)
{
changeBorder = false;
label1.Refresh();
}

现在我们验证是否绘制了一个新的特殊边框 shell。如果是这样,我们使用 ControlPaint用它上课 DrawBorder()方法绘制大小为 label1Rectangle 的自定义边框。您可以根据需要修改此边框。如果我们不想绘制此特殊边框,我们会绘制一个默认 边框。什么只是具有 Form 的背景色的颜色,所以看起来 label1 周围没有任何边框。

private void label1_Paint(object sender, PaintEventArgs e)
{
if (changeBorder)
{
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,
Color.Red, 0, ButtonBorderStyle.Solid,
Color.Red, 2, ButtonBorderStyle.Solid,
Color.Red, 0, ButtonBorderStyle.Solid,
Color.Red, 2, ButtonBorderStyle.Solid);
}
else
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, this.BackColor, ButtonBorderStyle.None);
}

ControlPaint.DrawBorder() 的方法参数中,请注意 0 而不是 2矩形宽度ControlPaint.DrawBorder()参数如下:

  1. int leftWidth
  2. int topWidth
  3. int rightWidth
  4. int 底部宽度

这就是为什么我将值 0 设置为第一个和第三个,这样就不会在右侧和左侧绘制边框。您可以根据需要进行调整。

关于c# - 更改 WinForms 控件的边框颜色和外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48442410/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com