RadioButtonRenderer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于呈现带/不带视觉样式的选项按钮控件(也称为单选按钮)的方法。 此类不能被继承。
public ref class RadioButtonRenderer sealed
public ref class RadioButtonRenderer abstract sealed
public sealed class RadioButtonRenderer
public static class RadioButtonRenderer
type RadioButtonRenderer = class
Public NotInheritable Class RadioButtonRenderer
Public Class RadioButtonRenderer
- 继承
-
RadioButtonRenderer
示例
下面的代码示例演示如何编写使用 DrawRadioButton 该方法绘制响应鼠标单击的选项按钮的自定义控件。
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
#using <System.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::VisualStyles;
namespace RadioButtonRendererSample
{
public ref class CustomRadioButton : public Control
{
private:
Rectangle textRectangleValue;
private:
bool clicked;
private:
RadioButtonState state;
public:
CustomRadioButton() : Control()
{
textRectangleValue = Rectangle();
state = RadioButtonState::UncheckedNormal;
this->Location = Point(50, 50);
this->Size = System::Drawing::Size(100, 20);
this->Text = "Click here";
this->Font = SystemFonts::IconTitleFont;
}
// Define the text bounds so that the text rectangle
// does not include the radio button.
public:
property Rectangle TextRectangle
{
Rectangle get()
{
Graphics^ g = this->CreateGraphics();
textRectangleValue.X = ClientRectangle.X +
RadioButtonRenderer::GetGlyphSize(g,
RadioButtonState::UncheckedNormal).Width;
textRectangleValue.Y = ClientRectangle.Y;
textRectangleValue.Width = ClientRectangle.Width -
RadioButtonRenderer::GetGlyphSize(g,
RadioButtonState::UncheckedNormal).Width;
textRectangleValue.Height = ClientRectangle.Height;
delete g;
return textRectangleValue;
}
}
// Draw the radio button in the current state.
protected:
virtual void OnPaint(PaintEventArgs^ e) override
{
__super::OnPaint(e);
RadioButtonRenderer::DrawRadioButton(e->Graphics,
ClientRectangle.Location, TextRectangle, this->Text,
this->Font, clicked, state);
}
// Draw the radio button in the checked or unchecked state.
protected:
virtual void OnMouseDown(MouseEventArgs^ e) override
{
__super::OnMouseDown(e);
if (!clicked)
{
clicked = true;
this->Text = "Clicked!";
state = RadioButtonState::CheckedPressed;
Invalidate();
}
else
{
clicked = false;
this->Text = "Click here";
state = RadioButtonState::UncheckedNormal;
Invalidate();
}
}
// Draw the radio button in the hot state.
protected:
virtual void OnMouseHover(EventArgs^ e) override
{
__super::OnMouseHover(e);
state = clicked ? RadioButtonState::CheckedHot :
RadioButtonState::UncheckedHot;
Invalidate();
}
// Draw the radio button in the hot state.
protected:
virtual void OnMouseUp(MouseEventArgs^ e) override
{
__super::OnMouseUp(e);
this->OnMouseHover(e);
}
// Draw the radio button in the normal (i.e. not hot) state
protected:
virtual void OnMouseLeave(EventArgs^ e) override
{
__super::OnMouseLeave(e);
state = clicked ? RadioButtonState::CheckedNormal :
RadioButtonState::UncheckedNormal;
Invalidate();
}
};
public ref class Form1 : public Form
{
public:
Form1() : Form()
{
Controls->Add(gcnew CustomRadioButton());
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
// RadioButtonRenderer.DrawRadioButton automatically detects
// this and draws the radio button without visual styles.
Application::EnableVisualStyles();
Application::Run(gcnew RadioButtonRendererSample::Form1());
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace RadioButtonRendererSample
{
class Form1 : Form
{
Button button1 = new Button();
public Form1()
: base()
{
CustomRadioButton RadioButton1 = new CustomRadioButton();
button1.Location = new System.Drawing.Point(175, 231);
button1.Size = new System.Drawing.Size(105, 23);
button1.Text = "Toggle Style";
button1.Click += new System.EventHandler(this.button1_Click);
Controls.Add(RadioButton1);
Controls.Add(button1);
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
// RadioButtonRenderer.DrawRadioButton automatically detects
// this and draws the radio button without visual styles.
Application.EnableVisualStyles();
Application.Run(new Form1());
}
private void button1_Click(object sender, EventArgs e)
{
Application.VisualStyleState =
Application.VisualStyleState ^
VisualStyleState.ClientAndNonClientAreasEnabled;
GroupBoxRenderer.RenderMatchingApplicationState = true;
if (Application.RenderWithVisualStyles)
this.Text = "Visual Styles Enabled";
else
this.Text = "Visual Styles Disabled";
}
}
public class CustomRadioButton : Control
{
private Rectangle textRectangleValue = new Rectangle();
private bool clicked = false;
private RadioButtonState state = RadioButtonState.UncheckedNormal;
public CustomRadioButton()
: base()
{
this.Location = new Point(50, 50);
this.Size = new Size(100, 20);
this.Text = "Click here";
this.Font = SystemFonts.IconTitleFont;
}
// Define the text bounds so that the text rectangle
// does not include the radio button.
public Rectangle TextRectangle
{
get
{
using (Graphics g = this.CreateGraphics())
{
textRectangleValue.X = ClientRectangle.X +
RadioButtonRenderer.GetGlyphSize(g,
RadioButtonState.UncheckedNormal).Width;
textRectangleValue.Y = ClientRectangle.Y;
textRectangleValue.Width = ClientRectangle.Width -
RadioButtonRenderer.GetGlyphSize(g,
RadioButtonState.UncheckedNormal).Width;
textRectangleValue.Height = ClientRectangle.Height;
}
return textRectangleValue;
}
}
// Draw the radio button in the current state.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
RadioButtonRenderer.DrawRadioButton(e.Graphics,
ClientRectangle.Location, TextRectangle, this.Text,
this.Font, clicked, state);
}
// Draw the radio button in the checked or unchecked state.
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (!clicked)
{
clicked = true;
this.Text = "Clicked!";
state = RadioButtonState.CheckedPressed;
Invalidate();
}
else
{
clicked = false;
this.Text = "Click here";
state = RadioButtonState.UncheckedNormal;
Invalidate();
}
}
// Draw the radio button in the hot state.
protected override void OnMouseHover(EventArgs e)
{
base.OnMouseHover(e);
state = clicked ? RadioButtonState.CheckedHot :
RadioButtonState.UncheckedHot;
Invalidate();
}
// Draw the radio button in the hot state.
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
this.OnMouseHover(e);
}
// Draw the radio button in the unpressed state.
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
state = clicked ? RadioButtonState.CheckedNormal :
RadioButtonState.UncheckedNormal;
Invalidate();
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Namespace RadioButtonRendererSample
Class Form1
Inherits Form
Dim WithEvents button1 As Button
Public Sub New()
Dim RadioButton1 As New CustomRadioButton()
button1 = New Button
Me.button1.Location = New System.Drawing.Point(185, 231)
Me.button1.Size = New System.Drawing.Size(105, 23)
Me.button1.Text = "Toggle Styles"
Controls.Add(RadioButton1)
Controls.Add(button1)
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
' RadioButtonRenderer.DrawRadioButton automatically detects
' this and draws the radio button without visual styles.
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
' Match application style and toggle visual styles off
' and on for the application.
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles button1.Click
RadioButtonRenderer.RenderMatchingApplicationState = True
Application.VisualStyleState = _
Application.VisualStyleState Xor _
VisualStyleState.ClientAndNonClientAreasEnabled
If Application.RenderWithVisualStyles Then
Me.Text = "Visual Styles Enabled"
Else
Me.Text = "Visual Styles Disabled"
End If
End Sub
End Class
Public Class CustomRadioButton
Inherits Control
Private textRectangleValue As New Rectangle()
Private clicked As Boolean = False
Private state As RadioButtonState = RadioButtonState.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
' Define the text bounds so that the text rectangle
' does not include the radio button.
Public ReadOnly Property TextRectangle() As Rectangle
Get
Using g As Graphics = Me.CreateGraphics()
With textRectangleValue
.X = Me.ClientRectangle.X + _
RadioButtonRenderer.GetGlyphSize(g, _
RadioButtonState.UncheckedNormal).Width
.Y = Me.ClientRectangle.Y
.Width = Me.ClientRectangle.Width - _
RadioButtonRenderer.GetGlyphSize(g, _
RadioButtonState.UncheckedNormal).Width
.Height = Me.ClientRectangle.Height
End With
End Using
Return textRectangleValue
End Get
End Property
' Draw the radio button in the current state.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
RadioButtonRenderer.DrawRadioButton(e.Graphics, _
Me.ClientRectangle.Location, TextRectangle, Me.Text, _
Me.Font, clicked, state)
End Sub
' Draw the radio button in the checked or unchecked state.
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
MyBase.OnMouseDown(e)
If Not clicked Then
clicked = True
Me.Text = "Clicked!"
state = RadioButtonState.CheckedPressed
Invalidate()
Else
clicked = False
Me.Text = "Click here"
state = RadioButtonState.UncheckedNormal
Invalidate()
End If
End Sub
' Draw the radio button in the hot state.
Protected Overrides Sub OnMouseHover(ByVal e As EventArgs)
MyBase.OnMouseHover(e)
If clicked Then
state = RadioButtonState.CheckedHot
Else
state = RadioButtonState.UncheckedHot
End If
Invalidate()
End Sub
' Draw the radio button in the hot state.
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)
Me.OnMouseHover(e)
End Sub
' Draw the radio button in the unpressed state.
Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
MyBase.OnMouseLeave(e)
If clicked Then
state = RadioButtonState.CheckedNormal
Else
state = RadioButtonState.UncheckedNormal
End If
Invalidate()
End Sub
End Class
End Namespace
注解
该 RadioButtonRenderer 类提供了一组 static
可用于呈现选项按钮控件的方法。 呈现控件是指绘制控件的用户界面。 若要绘制选项按钮,请使用其中 DrawRadioButton 一种方法。 这些方法提供各种选项,例如使用选项按钮绘制文本或图像。
如果在操作系统中启用了视觉样式,并且视觉样式应用于当前应用程序, DrawRadioButton 则会使用当前视觉样式绘制选项按钮。 否则,DrawRadioButton将使用经典Windows样式绘制选项按钮。 如果要绘制应自动匹配操作系统的当前视觉样式设置的自定义控件,这非常有用。
此类将 System.Windows.Forms.VisualStyles.VisualStyleRenderer 设置为类公开 System.Windows.Forms.VisualStyles.VisualStyleElement.Button.RadioButton 的某个元素的功能包装。 有关详细信息,请参阅 使用视觉样式呈现控件。
属性
RenderMatchingApplicationState |
获取或设置一个值,该值指示呈现器是否使用应用程序状态来确定呈现样式。 |
方法
DrawParentBackground(Graphics, Rectangle, Control) |
在指定区域中绘制控件的父级的背景。 |
DrawRadioButton(Graphics, Point, RadioButtonState) |
在指定状态下和指定位置绘制选项按钮控件(也称为单选按钮)。 |
DrawRadioButton(Graphics, Point, Rectangle, String, Font, Boolean, RadioButtonState) |
在指定状态下和指定位置,用指定文本和可选的聚焦框绘制选项按钮控件(也称为单选按钮)。 |
DrawRadioButton(Graphics, Point, Rectangle, String, Font, Image, Rectangle, Boolean, RadioButtonState) |
在指定状态下和指定位置,用指定文本和图像以及可选的聚焦框,绘制选项按钮控件(也称为单选按钮)。 |
DrawRadioButton(Graphics, Point, Rectangle, String, Font, TextFormatFlags, Boolean, RadioButtonState) |
在指定状态下和指定位置,用指定文本和文本格式以及可选的聚焦框,绘制选项按钮控件(也称为单选按钮)。 |
DrawRadioButton(Graphics, Point, Rectangle, String, Font, TextFormatFlags, Image, Rectangle, Boolean, RadioButtonState) |
在指定状态下和指定位置,用指定文本、文本格式、图像和可选的聚焦框,绘制选项按钮控件(也称为单选按钮)。 |
GetGlyphSize(Graphics, RadioButtonState) |
返回选项按钮(也称为单选按钮)标志符号的大小(以像素为单位)。 |
IsBackgroundPartiallyTransparent(RadioButtonState) |
指示选项按钮(也称为单选按钮)的背景是否有半透明或 alpha 混合块。 |