可以将 2 种颜色设置为复选框文本吗?

Set 2 colors to a Checkbox text possible?

我想为复选框文本设置 2 种颜色:

if (this.checkBox4.Checked) {
    this.checkBox4.ForeColor = Color.Green;
    this.checkBox4.Text = "Max Parameters on set ON";                 
}
else {
    this.checkBox4.ForeColor = Color.Red;
    this.checkBox4.Text = "Max Parameters on set OFF";

}

我想将 ON 设置为绿色,OFF 设​​置为红色

谢谢

编辑:

是的,它在 Form1.cs

private void checkBox4_CheckedChanged(object sender, EventArgs e)
{
    byte[] buffer;
    if (this.checkBox4.Checked)
    {
        this.checkBox4.ForeColor = Color.Green;
        this.checkBox4.Text = "Max Parameters Points on set ON";
        buffer = new byte[] { 0x90, 0xc3, 0, 12 };
        PS3.SetMemory(0x53e088, buffer);
    }
    else
    {
        this.checkBox4.ForeColor = Color.Red;
        this.checkBox4.Text = "Max Parameters Points on set OFF";
        buffer = new byte[] { 0x90, 0x83, 0, 12 };
        PS3.SetMemory(0x53e088, buffer);
    }
}

并且在 Form1.Designer.cs 中有:

// checkBox4
    // 
    this.checkBox4.AutoSize = true;
    this.checkBox4.Location = new System.Drawing.Point(14, 109);
    this.checkBox4.Name = "checkBox4";
    this.checkBox4.Size = new System.Drawing.Size(165, 17);
    this.checkBox4.TabIndex = 2;
    this.checkBox4.Text = "Max Parameters points on set";
    this.checkBox4.UseVisualStyleBackColor = true;
    this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged;

这取决于你把代码放在哪里。
如果将该代码放在 CheckBox.CheckedChangedCheckBox.CheckStateChanged 事件上,您可以获得想要的结果。

确保它在您的 checkbox4_CheckedChanged 活动中。它应该是这样的:

 private void checkBox4_CheckedChanged(object sender, EventArgs e)
    {
        if (this.checkBox4.Checked == true)
        {
            this.checkBox4.ForeColor = Color.Green;
            this.checkBox4.Text = "Max Parameters on set ON";

        }
        else if (this.checkBox4.Checked == false)
        {
            this.checkBox4.ForeColor = Color.Red;
            this.checkBox4.Text = "Max Parameters on set OFF";
        }
    }

您可以在设计视图中双击复选框以在代码视图中生成事件。

看看你是否想在复选框中使用彩色文本,你可能有 2 个选项:

1.If 使用 asp.net pasa html/css 形式的颜色值,它会做(很可能)

  1. 如果您想要 winforms 中的 aame 东西,那么有一个坏消息要告诉您。您将使用 GDI+ 扩展复选框组件并重绘。在网上搜索你会得到一些关于c#自定义复选框的文章

  2. 创建一个带有复选框和 rtfbox 的新用户控件。或者一个复选框和 2 个标签并智能对齐它们。

为了在 WinForms 控件中使用多色文本,您需要自己绘制控件。以下代码是从 VB.NET 自动翻译而来的,但应该可以工作。您需要将它作为一个新的 class 添加到您的项目中并进行编译。然后您应该会在设计器工具箱中看到一个新控件。您可能需要将控件的 AutoSize 设置为 false 并调整宽度。

结果:

它需要一些整理,但你应该明白了。

using System.Windows.Forms;
using System.Drawing;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;

public class MultiColorCheckbox : CheckBox
{

    public MultiColorCheckbox()
        : base()
    {
        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.UserPaint, true);
        this.AutoSize = false;
        this.Width = 50;
    }


    protected override void OnPaint(PaintEventArgs pevent)
    {
        //Draw background
        using (SolidBrush b = new SolidBrush(this.BackColor))
        {
            pevent.Graphics.FillRectangle(b, this.ClientRectangle);
        }

        //Draw the checkbox
        ControlPaint.DrawCheckBox(pevent.Graphics, new Rectangle(1, 1, 16, 16), this.Checked ? ButtonState.Checked : ButtonState.Normal);

        //Measure the base string
        Font f = this.Font;
        SizeF s1 = pevent.Graphics.MeasureString("Max Parameters on set ", f);
        Rectangle r1 = new Rectangle(18, 1, (int)s1.Width, this.ClientRectangle.Height - 2);

        //Create string format
        using (StringFormat sf = new StringFormat())
        {
            sf.LineAlignment = StringAlignment.Center;
            sf.FormatFlags = StringFormatFlags.NoWrap;
            sf.Trimming = StringTrimming.None;

            //Draw base string
            pevent.Graphics.DrawString("Max Parameters on set ", f, Brushes.Black, r1, sf);

            //Draw secondary string, based on check state
            if (this.Checked)
            {
                SizeF s2 = pevent.Graphics.MeasureString("ON", f);
                Rectangle r2 = new Rectangle((int)r1.Right, 1, (int)s2.Width, this.ClientRectangle.Height - 2);
                pevent.Graphics.DrawString("ON", f, Brushes.Green, r2, sf);
            }
            else
            {
                SizeF s2 = pevent.Graphics.MeasureString("OFF", f);
                Rectangle r2 = new Rectangle((int)r1.Right, 1, (int)s2.Width, this.ClientRectangle.Height - 2);
                pevent.Graphics.DrawString("OFF", f, Brushes.Red, r2, sf);
            }
        }
    }
}