CheckBoxRenderer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于呈现具有或不具有可视样式的复选框控件的方法。 此类不能被继承。
public ref class CheckBoxRenderer sealed
public ref class CheckBoxRenderer abstract sealed
public sealed class CheckBoxRenderer
public static class CheckBoxRenderer
type CheckBoxRenderer = class
Public NotInheritable Class CheckBoxRenderer
Public Class CheckBoxRenderer
- 继承
-
CheckBoxRenderer
示例
下面的代码示例演示如何编写使用 DrawCheckBox 该方法绘制响应鼠标单击的复选框的自定义控件。
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::VisualStyles;
namespace CheckBoxRendererSample
{
ref class CustomCheckBox : Control
{
private:
Rectangle textRectangleValue;
Point clickedLocationValue;
bool clicked;
CheckBoxState state;
public :
CustomCheckBox() : Control()
{
this->textRectangleValue = Rectangle();
this->clickedLocationValue = Point();
this->clicked = false;
this->state = CheckBoxState::UncheckedNormal;
this->Location = Point(50, 50);
this->Size = System::Drawing::Size(100, 20);
this->Text = "Click here";
this->Font = SystemFonts::IconTitleFont;
}
// Calculate the text bounds, exluding the check box.
Rectangle getTextRectangle()
{
Graphics ^g = this->CreateGraphics();
textRectangleValue.X = ClientRectangle.X +
CheckBoxRenderer::GetGlyphSize(g,
CheckBoxState::UncheckedNormal).Width;
textRectangleValue.Y = ClientRectangle.Y;
textRectangleValue.Width = ClientRectangle.Width -
CheckBoxRenderer::GetGlyphSize(g,
CheckBoxState::UncheckedNormal).Width;
textRectangleValue.Height = ClientRectangle.Height;
delete g;
return textRectangleValue;
}
protected:
// Draw the check box in the current state.
virtual void OnPaint(PaintEventArgs ^e) override
{
Control::OnPaint(e);
CheckBoxRenderer::DrawCheckBox(e->Graphics,
ClientRectangle.Location, this->getTextRectangle(), this->Text,
this->Font, TextFormatFlags::HorizontalCenter,
clicked, state);
}
// Draw the check box in the checked or unchecked state, alternately.
virtual void OnMouseDown(MouseEventArgs ^e) override
{
Control::OnMouseDown(e);
if (!clicked)
{
clicked = true;
this->Text = "Clicked!";
state = CheckBoxState::CheckedPressed;
Invalidate();
}
else
{
clicked = false;
this->Text = "Click here";
state = CheckBoxState::UncheckedNormal;
Invalidate();
}
}
// Draw the check box in the hot state.
virtual void OnMouseHover(EventArgs ^e) override
{
Control::OnMouseHover(e);
state = clicked ? CheckBoxState::CheckedHot :
CheckBoxState::UncheckedHot;
Invalidate();
}
// Draw the check box in the hot state.
virtual void OnMouseUp(MouseEventArgs ^e) override
{
Control::OnMouseUp(e);
this->OnMouseHover(e);
}
// Draw the check box in the unpressed state.
virtual void OnMouseLeave(EventArgs ^e) override
{
Control::OnMouseLeave(e);
state = clicked ? CheckBoxState::CheckedNormal :
CheckBoxState::UncheckedNormal;
Invalidate();
}
};
ref class Form1: public Form
{
public:
Form1() : Form()
{
CustomCheckBox ^CheckBox1 = gcnew CustomCheckBox();
Controls->Add(CheckBox1);
if (Application::RenderWithVisualStyles)
{
this->Text = "Visual Styles Enabled";
}
else
{
this->Text = "Visual Styles Disabled";
}
}
};
}
[STAThread]
int main()
{
// If you do not call EnableVisualStyles below, then
// CheckBoxRenderer.DrawCheckBox automatically detects
// this and draws the check box without visual styles.
Application::EnableVisualStyles();
Application::Run(gcnew CheckBoxRendererSample::Form1());
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace CheckBoxRendererSample
{
class Form1 : Form
{
public Form1()
: base()
{
CustomCheckBox CheckBox1 = new CustomCheckBox();
Controls.Add(CheckBox1);
if (Application.RenderWithVisualStyles)
this.Text = "Visual Styles Enabled";
else
this.Text = "Visual Styles Disabled";
}
[STAThread]
static void Main()
{
// If you do not call EnableVisualStyles below, then
// CheckBoxRenderer.DrawCheckBox automatically detects
// this and draws the check box without visual styles.
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
public class CustomCheckBox : Control
{
private Rectangle textRectangleValue = new Rectangle();
private Point clickedLocationValue = new Point();
private bool clicked = false;
private CheckBoxState state = CheckBoxState.UncheckedNormal;
public CustomCheckBox()
: base()
{
this.Location = new Point(50, 50);
this.Size = new Size(100, 20);
this.Text = "Click here";
this.Font = SystemFonts.IconTitleFont;
}
// Calculate the text bounds, exluding the check box.
public Rectangle TextRectangle
{
get
{
using (Graphics g = this.CreateGraphics())
{
textRectangleValue.X = ClientRectangle.X +
CheckBoxRenderer.GetGlyphSize(g,
CheckBoxState.UncheckedNormal).Width;
textRectangleValue.Y = ClientRectangle.Y;
textRectangleValue.Width = ClientRectangle.Width -
CheckBoxRenderer.GetGlyphSize(g,
CheckBoxState.UncheckedNormal).Width;
textRectangleValue.Height = ClientRectangle.Height;
}
return textRectangleValue;
}
}
// Draw the check box in the current state.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
CheckBoxRenderer.DrawCheckBox(e.Graphics,
ClientRectangle.Location, TextRectangle, this.Text,
this.Font, TextFormatFlags.HorizontalCenter,
clicked, state);
}
// Draw the check box in the checked or unchecked state, alternately.
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (!clicked)
{
clicked = true;
this.Text = "Clicked!";
state = CheckBoxState.CheckedPressed;
Invalidate();
}
else
{
clicked = false;
this.Text = "Click here";
state = CheckBoxState.UncheckedNormal;
Invalidate();
}
}
// Draw the check box in the hot state.
protected override void OnMouseHover(EventArgs e)
{
base.OnMouseHover(e);
state = clicked ? CheckBoxState.CheckedHot :
CheckBoxState.UncheckedHot;
Invalidate();
}
// Draw the check box in the hot state.
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
this.OnMouseHover(e);
}
// Draw the check box in the unpressed state.
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
state = clicked ? CheckBoxState.CheckedNormal :
CheckBoxState.UncheckedNormal;
Invalidate();
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Namespace CheckBoxRendererSample
Class Form1
Inherits Form
Public Sub New()
Dim CheckBox1 As New CustomCheckBox()
Controls.Add(CheckBox1)
If Application.RenderWithVisualStyles Then
Me.Text = "Visual Styles Enabled"
Else
Me.Text = "Visual Styles Disabled"
End If
End Sub
<STAThread()> _
Shared Sub Main()
' If you do not call EnableVisualStyles below, then
' CheckBoxRenderer.DrawCheckBox automatically detects
' this and draws the check box without visual styles.
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
Public Class CustomCheckBox
Inherits Control
Private textRectangleValue As New Rectangle()
Private clickedLocationValue As New Point()
Private clicked As Boolean = False
Private state As CheckBoxState = CheckBoxState.UncheckedNormal
Public Sub New()
With Me
.Location = New Point(50, 50)
.Size = New Size(100, 20)
.Text = "Click here"
.Font = SystemFonts.IconTitleFont
End With
End Sub
' Calculate the text bounds, exluding the check box.
Public ReadOnly Property TextRectangle() As Rectangle
Get
Using g As Graphics = Me.CreateGraphics()
With textRectangleValue
.X = Me.ClientRectangle.X + _
CheckBoxRenderer.GetGlyphSize(g, _
CheckBoxState.UncheckedNormal).Width
.Y = Me.ClientRectangle.Y
.Width = Me.ClientRectangle.Width - _
CheckBoxRenderer.GetGlyphSize(g, _
CheckBoxState.UncheckedNormal).Width
.Height = Me.ClientRectangle.Height
End With
End Using
Return textRectangleValue
End Get
End Property
' Draw the check box in the current state.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
CheckBoxRenderer.DrawCheckBox(e.Graphics, _
Me.ClientRectangle.Location, TextRectangle, Me.Text, _
Me.Font, TextFormatFlags.HorizontalCenter, _
clicked, state)
End Sub
' Draw the check box in the checked or unchecked state, alternately.
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
MyBase.OnMouseDown(e)
If Not clicked Then
With Me
.clicked = True
.Text = "Clicked!"
.state = CheckBoxState.CheckedPressed
End With
Invalidate()
Else
With Me
.clicked = False
.Text = "Click here"
.state = CheckBoxState.UncheckedNormal
End With
Invalidate()
End If
End Sub
' Draw the check box in the hot state.
Protected Overrides Sub OnMouseHover(ByVal e As EventArgs)
MyBase.OnMouseHover(e)
If clicked Then
state = CheckBoxState.CheckedHot
Else
state = CheckBoxState.UncheckedHot
End If
Invalidate()
End Sub
' Draw the check box in the hot state.
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)
Me.OnMouseHover(e)
End Sub
' Draw the check box in the unpressed state.
Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
MyBase.OnMouseLeave(e)
If clicked Then
state = CheckBoxState.CheckedNormal
Else
state = CheckBoxState.UncheckedNormal
End If
Invalidate()
End Sub
End Class
End Namespace
注解
该 CheckBoxRenderer 类提供了一组 static
可用于呈现复选框控件的方法。 呈现控件是指绘制控件的用户界面。 若要绘制复选框,请使用其中 DrawCheckBox 一种方法。 这些方法提供各种选项,例如使用复选框绘制文本或图像。
如果在操作系统中启用了视觉样式,并且视觉样式应用于当前应用程序, DrawCheckBox 则会使用当前视觉样式绘制复选框。 否则,DrawCheckBox将使用经典Windows样式绘制复选框。 如果要绘制应自动匹配操作系统的当前视觉样式设置的自定义控件,这非常有用。
此类包装 System.Windows.Forms.VisualStyles.VisualStyleRenderer 设置为类公开 System.Windows.Forms.VisualStyles.VisualStyleElement.Button.CheckBox 的元素之一的功能。 有关详细信息,请参阅 使用视觉样式呈现控件。
属性
RenderMatchingApplicationState |
获取或设置一个值,该值指示呈现器是否使用应用程序状态来确定呈现样式。 |
方法
DrawCheckBox(Graphics, Point, CheckBoxState) |
在指定状态和位置绘制复选框控件。 |
DrawCheckBox(Graphics, Point, Rectangle, String, Font, Boolean, CheckBoxState) |
使用指定文本和可选聚焦框在指定状态和位置绘制复选框控件。 |
DrawCheckBox(Graphics, Point, Rectangle, String, Font, Image, Rectangle, Boolean, CheckBoxState) |
使用指定文本、图像及可选聚焦框在指定状态和位置绘制复选框控件。 |
DrawCheckBox(Graphics, Point, Rectangle, String, Font, TextFormatFlags, Boolean, CheckBoxState) |
使用指定文本、文本格式设置和可选聚焦框在指定状态和位置绘制复选框控件。 |
DrawCheckBox(Graphics, Point, Rectangle, String, Font, TextFormatFlags, Image, Rectangle, Boolean, CheckBoxState) |
使用指定文本、文本格式设置、图像及可选聚焦框在指定状态和位置绘制复选框控件。 |
DrawParentBackground(Graphics, Rectangle, Control) |
在指定区域中绘制控件的父级的背景。 |
GetGlyphSize(Graphics, CheckBoxState) |
返回复选框标志符号的大小。 |
IsBackgroundPartiallyTransparent(CheckBoxState) |
指示复选框的背景是否具有半透明或 Alpha 混合的斑块。 |