- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 WinForms
。在我的表单中,我有一个 GroupBox
。这是一个自定义 组框。我想要 groupbox
的透明背景。我在为 groupbox
创建透明背景时遇到问题 此代码的问题是,当我将组框 backcolor
设置为透明时,我不断收到错误消息。
Error: Control does not support transparent background colors.
g.Clear(BackColor = Color.Transparent);
(这是给我问题的那一行)
private void DrawGroupBox(GroupBox box, Graphics g, Color textColor, Color borderColor)
{
if (box != null)
{
Brush textBrush = new SolidBrush(textColor);
Brush borderBrush = new SolidBrush(borderColor);
Pen borderPen = new Pen(borderBrush);
SizeF strSize = g.MeasureString(box.Text, box.Font);
Rectangle rect = new Rectangle(box.ClientRectangle.X,
box.ClientRectangle.Y + (int)(strSize.Height / 2),
box.ClientRectangle.Width - 1,
box.ClientRectangle.Height - (int)(strSize.Height / 2) - 1);
// Clear text and border
g.Clear(BackColor = Color.Transparent);
// Draw text
g.DrawString(box.Text, box.Font, textBrush, box.Padding.Left, 0);
// Drawing Border
//Left
g.DrawLine(borderPen, rect.Location, new Point(rect.X, rect.Y + rect.Height));
//Right
g.DrawLine(borderPen, new Point(rect.X + rect.Width, rect.Y), new Point(rect.X + rect.Width, rect.Y + rect.Height));
//Bottom
g.DrawLine(borderPen, new Point(rect.X, rect.Y + rect.Height), new Point(rect.X + rect.Width, rect.Y + rect.Height));
//Top1
g.DrawLine(borderPen, new Point(rect.X, rect.Y), new Point(rect.X + box.Padding.Left, rect.Y));
//Top2
g.DrawLine(borderPen, new Point(rect.X + box.Padding.Left + (int)(strSize.Width), rect.Y), new Point(rect.X + rect.Width, rect.Y));
}
}
private void groupBox1_Paint(object sender, PaintEventArgs e)
{
GroupBox box = sender as GroupBox;
DrawGroupBox(box, e.Graphics, Color.Red, Color.Blue);
}
g.Clear(groupBox1.BackColor = Color.Transparent);
如果我这样做,我会得到:
This example consists of a
Panel
with a dice image inside the panel, and the customGroupbox
.
最佳答案
GroupBox
控件支持透明背景,除非你使用System
作为FlatStyle
,但是对于边框颜色,你需要自己绘制组框。
你可以继承自GroupBox
然后因为GroupBox
支持Transparent
背景,所以你可以简单地覆盖OnPaint
并在不对背景做任何事情的情况下呈现您的组框。
代码
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
public class GroupBoxEx : GroupBox
{
private Color borderColor = Color.Black;
[DefaultValue(typeof(Color), "Black")]
public Color BorderColor
{
get { return borderColor; }
set { borderColor = value; this.Invalidate(); }
}
private Color textColor = Color.Black;
[DefaultValue(typeof(Color), "Black")]
public Color TextColor
{
get { return textColor; }
set { textColor = value; this.Invalidate(); }
}
protected override void OnPaint(PaintEventArgs e)
{
GroupBoxState state = base.Enabled ? GroupBoxState.Normal :
GroupBoxState.Disabled;
TextFormatFlags flags = TextFormatFlags.PreserveGraphicsTranslateTransform |
TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.TextBoxControl |
TextFormatFlags.WordBreak;
Color titleColor = this.TextColor;
if (!this.ShowKeyboardCues)
flags |= TextFormatFlags.HidePrefix;
if (this.RightToLeft == RightToLeft.Yes)
flags |= TextFormatFlags.RightToLeft | TextFormatFlags.Right;
if (!this.Enabled)
titleColor = SystemColors.GrayText;
DrawUnthemedGroupBoxWithText(e.Graphics, new Rectangle(0, 0, base.Width,
base.Height), this.Text, this.Font, titleColor, flags, state);
RaisePaintEvent(this, e);
}
private void DrawUnthemedGroupBoxWithText(Graphics g, Rectangle bounds,
string groupBoxText, Font font, Color titleColor,
TextFormatFlags flags, GroupBoxState state)
{
Rectangle rectangle = bounds;
rectangle.Width -= 8;
Size size = TextRenderer.MeasureText(g, groupBoxText, font,
new Size(rectangle.Width, rectangle.Height), flags);
rectangle.Width = size.Width;
rectangle.Height = size.Height;
if ((flags & TextFormatFlags.Right) == TextFormatFlags.Right)
rectangle.X = (bounds.Right - rectangle.Width) - 8;
else
rectangle.X += 8;
TextRenderer.DrawText(g, groupBoxText, font, rectangle, titleColor, flags);
if (rectangle.Width > 0)
rectangle.Inflate(2, 0);
using (var pen = new Pen(this.BorderColor))
{
int num = bounds.Top + (font.Height / 2);
g.DrawLine(pen, bounds.Left, num - 1, bounds.Left, bounds.Height - 2);
g.DrawLine(pen, bounds.Left, bounds.Height - 2, bounds.Width - 1,
bounds.Height - 2);
g.DrawLine(pen, bounds.Left, num - 1, rectangle.X - 3, num - 1);
g.DrawLine(pen, rectangle.X + rectangle.Width + 2, num - 1,
bounds.Width - 2, num - 1);
g.DrawLine(pen, bounds.Width - 2, num - 1, bounds.Width - 2,
bounds.Height - 2);
}
}
}
截图
关于控件的一些注意事项
GroupBox
控件支持透明背景,除非您将 System
用作 FlatStyle
。Panel
,因为它是一个容器控件,还支持透明背景色。Control
的自定义控件以支持透明背景,您应该在构造函数中添加 SetStyle(ControlStyles.SupportsTransparentBackColor, true);
。GroupBox
的绘制代码的基础上,我做了一些修改以满足您的要求,并且仍然保持原样GroupBox
。BorderColor
属性以支持自定义边框颜色。GroupBox
的 ForeColor
属性来呈现控件的标题可能会很烦人,因为 ForeColor
是一个环境属性,将由子项继承控制。为此,我创建了另一个属性,如 TextColor
。 (默认情况下,组框的子项将使用组框的前景色,除非您更改其前景色属性。)关于c# - 具有自定义 TextColor、BorderColor 和透明背景颜色的自定义 GroupBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562088/
如果我的问题看起来很新手,我很抱歉,textColor 和 android:textColor 有什么区别?我不明白在哪里使用哪个感谢您的帮助 最佳答案 textColor 是 AppCompat 库
我一直想知道这个问题。 构建 XML 时 Android布局,我们可以定义一个TextView使用 RGB 十六进制代码或来自 color.xml 的颜色值的文本颜色文件。 android:textC
Android searchview 有默认的 queryhint textcolor 和 text color 。我们如何使用 AndroidX 在 Android Searchview 中更改 e
我只是想将我的文本文本字段设置为与详细文本标签颜色相同的颜色,这似乎是正确的方法,在这里看到了一些提供此答案的内容,但我收到了错误,有什么想法吗? txtPassword.textColor = ce
我遇到的问题是我无法在以下 javascript 表单中设置两种不同的文本颜色(通过 css 类)。标准类是灰色(灰色文本颜色),但是一旦有人点击“在此处输入您的邮件”,要输入的电子邮件颜色文本应该是
如何将用户输入的颜色传递给 conio.h 中的 textcolor() 函数? textcolor(BLUE); cprintf("Hello"); 工作正常,但是 char c[20]; gets
我是安卓新手。在这上面花了 3 天之后,我无法弄清楚。 android:textColor= 在 TextView 上,但它不会改变颜色。我可以更改所有其他值,但不能更改 textColor。 最佳答
我的应用程序中有一个 Edittext。我在 XML 中以下列方式将其默认颜色设置为黑色: android:textColor="@android:color/black" 布局:
我只是想使用这段代码更改我的回收 View 中的文本颜色 ↓↓↓ itemView.resultTV.textColor = if (result >= 0) R.color.green else R
如何在禁用控件时更改文本的颜色。我想在 C# winforms 中禁用控件时设置不同的颜色。 最佳答案 编辑:我在评论中犯了与 Cody 相同的错误,因此更正了我的答案。 要看是哪个控件。 例如,如果
在flutter和我的应用程序中,我尝试不使用FlatButton来更改一些ThemeData文本颜色,因为在应用程序的某些部分中,我希望按钮具有白色或红色文本, 我如何正常设置此文本颜色? 例如:
对于我的 uipickerview,我有: - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row fo
我有这样的布局。这里我将 textColor 设置为红色。 当我在模拟器上运行它时,一切都按预期工作。但是,当我在设备上运行时,textColor 是白色的。它曾经在设备上工作。 我用模拟器做了很多代
我在使用标准 android Switch 组件时遇到了一个奇怪的问题。 我已经分配了我的自定义跟踪器和拇指可绘制对象 - 一切看起来和工作正常,除了 textColor 属性的颜色始终是深色(可能是
我编写了一个依赖资源中定义的颜色的应用程序。有些是直接在布局 XML 文件中设置的,有些是在代码中设置的。示例: res/values/styles.xml 中的颜色定义: #33B5E5 布局:
我的应用程序中有几个按钮,我想为所有按钮应用一种样式。 以下是我放在 values 文件夹中的 styles.xml 文件。 bold #282780
我一直在研究在用 C 编写的 DOS 程序中使用颜色。有人告诉我 conio.h 具有 textcolor() 函数,但是当我在我的代码中使用它时,编译器/链接器抛出错误提示我有一个未定义的函数引用。
我正在做一些教程,我尝试尝试使用 textColor。使用每个 Widget 中的属性、布局 xml 或样式属性,这可以很好地工作。但我想知道是否可以定义一个全局 textColor,据我所知是不可能
我正在尝试将通过代码创建的 ColorStateList 应用为 TextView 的 TextColor。问题是,如果我使用在 xml 中定义的 ColorStateList,它会起作用,但当我通过
我设法在我的代码中使用了一个 spinner 并且想通过那个 spinner 改变 MainActivity 文件中某个文本的 textColor,但是他位于另一个类文件 - Einstellunge
我是一名优秀的程序员,十分优秀!