gpt4 book ai didi

c# - 在不更改文本、背景颜色、已启用的情况下突出显示按钮?

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

突出显示按钮的好方法是什么?

这要么被使用,要么不允许被使用:

  • 不要更改button.Text(必须保留旧文本)
  • 不要改变button.BackColor(按钮已经很鲜艳了)
  • 不要更改button.Enabled(已使用但还不够)

enter image description here

我们的想法是拥有类似 RadioButton 组的东西,只有普通按钮。所选按钮应该在眼角中很容易看到。

我也有过的想法:

  • 边框/底纹:从未使用过,我真的不知道如何更改默认按钮底纹或单个按钮的边框样式。
  • 字体(下划线)
  • 图片(没试过)

最佳答案

通常,突出显示按钮应该使用 BackColor 来完成,但如果您想要不同的东西,您可以轻松地更改 Border 的外观。下面是实现边框外观之一的代码:

public class ButtonX : Button {
GraphicsPath border = new GraphicsPath();
int radius = 3;
float borderWidth;
Color borderColor = Color.Orange;
bool _checked;
public float BorderWidth {
get { return borderWidth; }
set {
borderWidth = value;
Invalidate();
}
}
public Color BorderColor {
get { return borderColor; }
set {
borderColor = value;
Invalidate();
}
}
public ButtonX() {
BorderWidth = 4;
}
public bool Checked {
get { return _checked; }
set {
_checked = value;
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs pevent) {
base.OnPaint(pevent);
if (Checked) {
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
for (float f = BorderWidth; f >= 0.01f; f -= 1f)
{
using (Pen pen = new Pen(Color.FromArgb((int)(100 - 100 * f * f / (BorderWidth * BorderWidth)), borderColor), f))
{
pen.LineJoin = LineJoin.Round;
pen.Alignment = PenAlignment.Center;
pevent.Graphics.DrawPath(pen, border);
}
}
}
}
private void UpdateBorder() {
border = new GraphicsPath();
RectangleF rect = new RectangleF{Width = radius * 2, Height = radius * 2, X = BorderWidth/2, Y = BorderWidth/2};
border.AddArc(rect, 180, 90);
rect.X = ClientSize.Width - BorderWidth/2 - radius * 2 - 0.5f;
border.AddArc(rect, 270, 90);
rect.Y = ClientSize.Height - BorderWidth/2 - radius * 2 - 0.5f;
border.AddArc(rect, 0, 90);
rect.X = BorderWidth / 2;
border.AddArc(rect, 90, 90);
border.CloseAllFigures();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
UpdateBorder();
}
}

注意:上面的ButtonX有一个属性叫做Checked,你可以把它改成你想要的,它是一个判断什么时候的属性显示了 highlighted border。只需将其设置为 true 即可显示突出显示的边框。以下是一些屏幕截图(边框为 8):

enter image description here

enter image description here

关于c# - 在不更改文本、背景颜色、已启用的情况下突出显示按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19679362/

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