RadioButtonRenderer 類別

定義

提供用來呈現包含或不包含視覺化樣式的選項按鈕 (Option button) 控制項 (亦稱為選項按鈕 (Radio button)) 的方法。 此類別無法獲得繼承。

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.VisualStyleElement.Button.RadioButton 功能 System.Windows.Forms.VisualStyles.VisualStyleRenderer 。 如需詳細資訊,請參閱 使用視覺化樣式轉譯控制項

屬性

RenderMatchingApplicationState

取得或設定值,指出產生器是否會使用應用程式狀態來判斷呈現樣式。

方法

DrawParentBackground(Graphics, Rectangle, Control)

在指定的區域中繪製控制項父代的背景。

DrawRadioButton(Graphics, Point, RadioButtonState)

在指定的狀態下和位置中繪製選項按鈕 (Option button) 控制項 (也稱為選項按鈕 (Radio button))。

DrawRadioButton(Graphics, Point, Rectangle, String, Font, Boolean, RadioButtonState)

使用指定的文字以及選擇性的焦點矩形,在指定的狀態下和位置中繪製選項按鈕 (Option button) 控制項 (也稱為選項按鈕 (Radio button))。

DrawRadioButton(Graphics, Point, Rectangle, String, Font, Image, Rectangle, Boolean, RadioButtonState)

使用指定的文字和影像,以及選擇性的焦點矩形,在指定的狀態下和位置中繪製選項按鈕 (Option button) 控制項 (也稱為選項按鈕 (Radio button))。

DrawRadioButton(Graphics, Point, Rectangle, String, Font, TextFormatFlags, Boolean, RadioButtonState)

使用指定的文字和文字格式,以及選擇性的焦點矩形,在指定的狀態下和位置中繪製選項按鈕 (Option button) 控制項 (也稱為選項按鈕 (Radio button))。

DrawRadioButton(Graphics, Point, Rectangle, String, Font, TextFormatFlags, Image, Rectangle, Boolean, RadioButtonState)

使用指定的文字、文字格式和影像,以及選擇性的焦點矩形,在指定的狀態下和位置中繪製選項按鈕 (Option button) 控制項 (也稱為選項按鈕 (Radio button))。

GetGlyphSize(Graphics, RadioButtonState)

傳回選項按鈕 (Option button) (也稱為選項按鈕 (Radio button)) 圖像的大小 (以像素為單位)。

IsBackgroundPartiallyTransparent(RadioButtonState)

指出選項按鈕 (Option button) (也稱為選項按鈕 (Radio button)) 的背景是否有半透明或 Alpha 混合的片段。

適用於

另請參閱