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

时间:2015-05-02 23:56:25

标签: c# visual-studio-2012 checkbox colors

我想为Checkbox文本设置2种颜色:

true

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

由于

修改

是的,它在Form1.cs

while($obj = mysql_fetch_object($page)) {
// Code
}

在Form1.Designer.cs中有:

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";

}

4 个答案:

答案 0 :(得分:1)

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

结果:

enter image description here

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

确保它在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";

        }
    }

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

答案 3 :(得分:0)

看看你是否想要复选框中有多色文本你可能有两个选项:

1.如果使用asp.net pasa html / css表单中的颜色值,它会(很可能)

  1. 如果你想在winforms中使用aame,那么对你来说这是一个坏消息。您将使用扩展复选框组件并使用GDI +重绘。在网上搜索你会得到一些关于c#

  2. 中自定义复选框的文章
  3. 使用复选框和rtfbox创建新的用户控件。或者一个复选框和2个标签并智能地对齐它们。