C# 循环通过彩色复选框

C# 循环通过彩色复选框,c#,winforms,events,C#,Winforms,Events,我的表单上有五种不同颜色的复选框背景,我想压缩可执行代码段,如下所示。有没有办法做得更好 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 sen

我的表单上有五种不同颜色的复选框背景,我想压缩可执行代码段,如下所示。有没有办法做得更好

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

您可以为复选框和要填写的相应颜色声明字典或KeyValuePair,如下所示:

private Dictionary<CheckBox, Brush> _checkboxColours;
private void CheckBox_Paint(object sender, PaintEventArgs e)
        {
            var checkbox = sender as CheckBox;
            if ((bool)(checkbox?.Checked))
            {
                var parsed = _checkboxColours.TryGetValue(checkbox, out Brush color);
                if (parsed)
                {
                    e.Graphics.FillRectangle(color, 0, 0, 13, 13);
                }
                else
                {
                    e.Graphics.FillRectangle(Brushes.White, 0, 0, 13, 13);
                }
            }
        }
然后,您可以为每个使用字典查找要绘制的颜色的绘制方法创建一个绘制方法,然后按如下方式进行填充:

private Dictionary<CheckBox, Brush> _checkboxColours;
private void CheckBox_Paint(object sender, PaintEventArgs e)
        {
            var checkbox = sender as CheckBox;
            if ((bool)(checkbox?.Checked))
            {
                var parsed = _checkboxColours.TryGetValue(checkbox, out Brush color);
                if (parsed)
                {
                    e.Graphics.FillRectangle(color, 0, 0, 13, 13);
                }
                else
                {
                    e.Graphics.FillRectangle(Brushes.White, 0, 0, 13, 13);
                }
            }
        }
跑步时看起来是这样的:

            this.checkBox1.Paint += this.CheckBox_Paint;
            this.checkBox2.Paint += this.CheckBox_Paint;
            this.checkBox3.Paint += this.CheckBox_Paint;
            this.checkBox4.Paint += this.CheckBox_Paint;
            this.checkBox5.Paint += this.CheckBox_Paint;

您可以为复选框和要填写的相应颜色声明字典或KeyValuePair,如下所示:

private Dictionary<CheckBox, Brush> _checkboxColours;
private void CheckBox_Paint(object sender, PaintEventArgs e)
        {
            var checkbox = sender as CheckBox;
            if ((bool)(checkbox?.Checked))
            {
                var parsed = _checkboxColours.TryGetValue(checkbox, out Brush color);
                if (parsed)
                {
                    e.Graphics.FillRectangle(color, 0, 0, 13, 13);
                }
                else
                {
                    e.Graphics.FillRectangle(Brushes.White, 0, 0, 13, 13);
                }
            }
        }
然后,您可以为每个使用字典查找要绘制的颜色的绘制方法创建一个绘制方法,然后按如下方式进行填充:

private Dictionary<CheckBox, Brush> _checkboxColours;
private void CheckBox_Paint(object sender, PaintEventArgs e)
        {
            var checkbox = sender as CheckBox;
            if ((bool)(checkbox?.Checked))
            {
                var parsed = _checkboxColours.TryGetValue(checkbox, out Brush color);
                if (parsed)
                {
                    e.Graphics.FillRectangle(color, 0, 0, 13, 13);
                }
                else
                {
                    e.Graphics.FillRectangle(Brushes.White, 0, 0, 13, 13);
                }
            }
        }
跑步时看起来是这样的:

            this.checkBox1.Paint += this.CheckBox_Paint;
            this.checkBox2.Paint += this.CheckBox_Paint;
            this.checkBox3.Paint += this.CheckBox_Paint;
            this.checkBox4.Paint += this.CheckBox_Paint;
            this.checkBox5.Paint += this.CheckBox_Paint;

事实上,正如TaW所评论的,我也会实施,您可以:

单击复选框1_Paint并按Ctrl-R-R,将其重命名为AnyCheckBox_Paint 将代码更改为: 访问设计器并选中所有复选框,转到“特性”网格“闪电事件”,然后从绘制事件行旁边的下拉列表中选择任意复选框\u绘制 现在,您只需在每个复选框的标记属性中输入颜色的字符串名称。或者,您可以根据需要为前或后着色,并在代码中使用该颜色,而不是从标记中的字符串进行解析 最后,如果上面写入了0个引用,则可以删除绘制事件处理程序。删除设计器仍引用的事件处理程序将导致错误,这意味着您必须编辑窗体的designer.cs以使设计器再次显示
如果您愿意,您也可以考虑缓存笔刷,而不是使用它们并处理它们

事实上,正如TaW所评论的,我会实现您可以:

单击复选框1_Paint并按Ctrl-R-R,将其重命名为AnyCheckBox_Paint 将代码更改为: 访问设计器并选中所有复选框,转到“特性”网格“闪电事件”,然后从绘制事件行旁边的下拉列表中选择任意复选框\u绘制 现在,您只需在每个复选框的标记属性中输入颜色的字符串名称。或者,您可以根据需要为前或后着色,并在代码中使用该颜色,而不是从标记中的字符串进行解析 最后,如果上面写入了0个引用,则可以删除绘制事件处理程序。删除设计器仍引用的事件处理程序将导致错误,这意味着您必须编辑窗体的designer.cs以使设计器再次显示
如果需要,您还可以考虑缓存笔刷,而不是使用它们并处理它们

对所有笔刷使用公共绘制事件!选择全部并将事件名称粘贴到事件窗格的绘制槽中!-将发件人强制转换为复选框,以确定它是哪种颜色以及使用哪种颜色。您还可以将每个的标记设置为填充颜色,如果它总是相同的话..我不记得使用常见的绘制事件。。。我马上就试试!非常感谢您为所有人举办一次普通的绘画活动!选择全部并将事件名称粘贴到事件窗格的绘制槽中!-将发件人强制转换为复选框,以确定它是哪种颜色以及使用哪种颜色。您还可以将每个的标记设置为填充颜色,如果它总是相同的话..我不记得使用常见的绘制事件。。。我马上就试试!非常感谢TaWWill更新,我目前正在工作,请在答案框中键入所有内容,我的错误。一个问题的解决方案是一个新问题;代码片段非常漂亮,非常清晰!非常感谢您对康纳的支持和帮助!将更新,我正在工作,目前在答案框中键入所有内容,我的错误。一个问题的解决方案是一个新问题;代码片段非常漂亮,非常清晰!非常感谢您对康纳的支持和帮助!非常感谢您的支持,凯厄斯:非常感谢您的支持,凯厄斯: