c# - 循环遍历彩色复选框
问题描述
我的表单上有五种不同颜色的复选框背景,我想压缩可执行代码段(见下文)。有没有办法做得更好?
private void CheckBox1_Paint(object sender, PaintEventArgs e)
{
if (checkBox1.Checked)
{
e.Graphics.FillRectangle(Brushes.Red, 0, 0, 13, 13);
}
}
private void CheckBox2_Paint(object sender, PaintEventArgs e)
{
if (checkBox2.Checked)
{
e.Graphics.FillRectangle(Brushes.Green, 0, 0, 13, 13);
}
}
private void CheckBox3_Paint(object sender, PaintEventArgs e)
{
if (checkBox3.Checked)
{
e.Graphics.FillRectangle(Brushes.Yellow, 0, 0, 13, 13);
}
}
private void CheckBox4_Paint(object sender, PaintEventArgs e)
{
if (checkBox4.Checked)
{
e.Graphics.FillRectangle(Brushes.Green, 0, 0, 13, 13);
}
}
private void CheckBox5_Paint(object sender, PaintEventArgs e)
{
if (checkBox5.Checked)
{
e.Graphics.FillRectangle(Brushes.Yellow, 0, 0, 13, 13);
}
}
解决方案
事实上,正如 TaW 所评论的(我会实施的),您可以:
- 单击
CheckBox1_Paint
并按Ctrl-RR,将其重命名为AnyCheckBox_Paint
- 将代码更改为:
private void AnyCheckBox_Paint(object sender, PaintEventArgs e)
{
if (sender is CheckBox cb && cb.Checked)
{
using(var b = new SolidBrush(Color.FromName(cb.Tag.ToString())))
e.Graphics.FillRectangle(b, 0, 0, 13, 13);
}
}
- 访问设计器并选择所有复选框,转到属性网格闪电(事件),然后
AnyCheckBox_Paint
从 Paint 事件行旁边的下拉列表中选择 - 现在您只需在每个复选框的 Tag 属性中放置一个颜色的字符串名称。或者,您可以将前色或后色着色为您想要的颜色并在代码中使用它,而不是从标签中的字符串解析
- 最后,一旦在它们上方写入 Paint 事件处理程序,您就可以删除
0 references
它们(删除仍然由设计器引用的事件处理程序将导致错误,这意味着您必须编辑表单的 Designer.cs 以使设计器再次显示)
如果需要,您还可以查看缓存画笔,而不是使用它们并处理它们
推荐阅读
- oracle - 使用 Oracle 中的内部连接进行更新不起作用
- postgresql - PostgreSQL 中对主键的基本 CHECK 约束是否合理/必要?
- android - 已完成的启动活动在启动器上重新启动
- android - 带有文本的矩形(圆角)浮动操作按钮
- asterisk - 如何以编程方式在星号上暂停/取消暂停实时录制?
- css - 有没有办法在 Edge 浏览器中获取 xpath 和 css?
- mysql - MySQL为两列选择“不同/唯一”记录
- python - 显示包含图形对象的熊猫数据框
- c - C 中的 OOP。类的默认值
- android - 尝试在空对象引用上调用虚拟方法“void android.widget.ImageButton.setOnClickListener”