ComboBoxRenderer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于以视觉样式呈现组合框控件的方法。 此类不能被继承。
public ref class ComboBoxRenderer sealed
public ref class ComboBoxRenderer abstract sealed
public sealed class ComboBoxRenderer
public static class ComboBoxRenderer
type ComboBoxRenderer = class
Public NotInheritable Class ComboBoxRenderer
Public Class ComboBoxRenderer
- 继承
-
ComboBoxRenderer
示例
下面的代码示例演示如何创建自定义控件,该控件使用 DrawTextBox 和 DrawDropDownButton 方法来绘制响应鼠标单击的组合框。
#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 ComboBoxRendererSample
{
ref class CustomComboBox: public Control
{
private:
System::Drawing::Size arrowSize;
Rectangle arrowRectangle;
Rectangle topTextBoxRectangle;
Rectangle bottomTextBoxRectangle;
ComboBoxState textBoxState;
ComboBoxState arrowState;
String^ bottomText;
bool isActivated;
int minHeight;
int minWidth;
public:
CustomComboBox() : Control()
{
minHeight = 38;
minWidth = 40;
this->Location = Point(10, 10);
this->Size = System::Drawing::Size(140, 38);
this->Font = SystemFonts::IconTitleFont;
this->Text = "Click the button";
textBoxState = ComboBoxState::Normal;
bottomText = "Using ComboBoxRenderer";
arrowState = ComboBoxState::Normal;
// Initialize the rectangles to look like the standard combo
// box control.
arrowSize = System::Drawing::Size(18, 20);
arrowRectangle = Rectangle(ClientRectangle.X +
ClientRectangle.Width - arrowSize.Width - 1,
ClientRectangle.Y + 1,
arrowSize.Width,
arrowSize.Height);
topTextBoxRectangle = Rectangle(ClientRectangle.X,
ClientRectangle.Y,
ClientRectangle.Width,
arrowSize.Height + 2);
bottomTextBoxRectangle = Rectangle(ClientRectangle.X,
ClientRectangle.Y + topTextBoxRectangle.Height,
ClientRectangle.Width,
topTextBoxRectangle.Height - 6);
}
// Draw the combo box in the current state.
protected:
virtual void OnPaint(PaintEventArgs^ e) override
{
Control::OnPaint(e);
if (!ComboBoxRenderer::IsSupported)
{
this->Parent->Text = "Visual Styles Disabled";
return;
}
this->Parent->Text = "CustomComboBox Enabled";
// Always draw the main text box and drop down arrow in their
// current states
ComboBoxRenderer::DrawTextBox(e->Graphics, topTextBoxRectangle,
this->Text, this->Font, textBoxState);
ComboBoxRenderer::DrawDropDownButton(e->Graphics, arrowRectangle,
arrowState);
// Only draw the bottom text box if the arrow has been clicked
if (isActivated)
{
ComboBoxRenderer::DrawTextBox(e->Graphics,
bottomTextBoxRectangle, bottomText, this->Font,
textBoxState);
}
}
protected:
virtual void OnMouseDown(MouseEventArgs^ e) override
{
Control::OnMouseDown(e);
// Check whether the user clicked the arrow.
if (arrowRectangle.Contains(e->Location) &&
ComboBoxRenderer::IsSupported)
{
// Draw the arrow in the pressed state.
arrowState = ComboBoxState::Pressed;
// The user has activated the combo box.
if (!isActivated)
{
this->Text = "Clicked!";
textBoxState = ComboBoxState::Pressed;
isActivated = true;
}
// The user has deactivated the combo box.
else
{
this->Text = "Click here";
textBoxState = ComboBoxState::Normal;
isActivated = false;
}
// Redraw the control.
Invalidate();
}
}
protected:
virtual void OnMouseUp(MouseEventArgs^ e) override
{
Control::OnMouseUp(e);
if (arrowRectangle.Contains(e->Location) &&
ComboBoxRenderer::IsSupported)
{
arrowState = ComboBoxState::Normal;
Invalidate();
}
}
};
ref class Form1 : public Form
{
public:
Form1() : Form()
{
this->Size = System::Drawing::Size(300, 300);
CustomComboBox^ ComboBox1 = gcnew CustomComboBox();
Controls->Add(ComboBox1);
}
};
}
[STAThread]
int main()
{
// The call to EnableVisualStyles below does not affect
// whether ComboBoxRenderer.IsSupported is true; as long as visual
// styles are enabled by the operating system, IsSupported is true.
Application::EnableVisualStyles();
Application::Run(gcnew ComboBoxRendererSample::Form1());
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace ComboBoxRendererSample
{
class Form1 : Form
{
public Form1()
: base()
{
this.Size = new Size(300, 300);
CustomComboBox ComboBox1 = new CustomComboBox();
Controls.Add(ComboBox1);
}
[STAThread]
static void Main()
{
// The call to EnableVisualStyles below does not affect
// whether ComboBoxRenderer.IsSupported is true; as long as visual
// styles are enabled by the operating system, IsSupported is true.
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
public class CustomComboBox : Control
{
private Size arrowSize;
private Rectangle arrowRectangle;
private Rectangle topTextBoxRectangle;
private Rectangle bottomTextBoxRectangle;
private ComboBoxState textBoxState = ComboBoxState.Normal;
private ComboBoxState arrowState = ComboBoxState.Normal;
private String bottomText = "Using ComboBoxRenderer";
private bool isActivated = false;
private const int minHeight = 38;
private const int minWidth = 40;
public CustomComboBox()
: base()
{
this.Location = new Point(10, 10);
this.Size = new Size(140, 38);
this.Font = SystemFonts.IconTitleFont;
this.Text = "Click the button";
// Initialize the rectangles to look like the standard combo
// box control.
arrowSize = new Size(18, 20);
arrowRectangle = new Rectangle(ClientRectangle.X +
ClientRectangle.Width - arrowSize.Width - 1,
ClientRectangle.Y + 1,
arrowSize.Width,
arrowSize.Height);
topTextBoxRectangle = new Rectangle(ClientRectangle.X,
ClientRectangle.Y,
ClientRectangle.Width,
arrowSize.Height + 2);
bottomTextBoxRectangle = new Rectangle(ClientRectangle.X,
ClientRectangle.Y + topTextBoxRectangle.Height,
ClientRectangle.Width,
topTextBoxRectangle.Height - 6);
}
// Draw the combo box in the current state.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (!ComboBoxRenderer.IsSupported)
{
this.Parent.Text = "Visual Styles Disabled";
return;
}
this.Parent.Text = "CustomComboBox Enabled";
// Always draw the main text box and drop down arrow in their
// current states
ComboBoxRenderer.DrawTextBox(e.Graphics, topTextBoxRectangle,
this.Text, this.Font, textBoxState);
ComboBoxRenderer.DrawDropDownButton(e.Graphics, arrowRectangle,
arrowState);
// Only draw the bottom text box if the arrow has been clicked
if (isActivated)
{
ComboBoxRenderer.DrawTextBox(e.Graphics,
bottomTextBoxRectangle, bottomText, this.Font,
textBoxState);
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
// Check whether the user clicked the arrow.
if (arrowRectangle.Contains(e.Location) &&
ComboBoxRenderer.IsSupported)
{
// Draw the arrow in the pressed state.
arrowState = ComboBoxState.Pressed;
// The user has activated the combo box.
if (!isActivated)
{
this.Text = "Clicked!";
textBoxState = ComboBoxState.Pressed;
isActivated = true;
}
// The user has deactivated the combo box.
else
{
this.Text = "Click here";
textBoxState = ComboBoxState.Normal;
isActivated = false;
}
// Redraw the control.
Invalidate();
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
if (arrowRectangle.Contains(e.Location) &&
ComboBoxRenderer.IsSupported)
{
arrowState = ComboBoxState.Normal;
Invalidate();
}
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Namespace ComboBoxRendererSample
Class Form1
Inherits Form
Public Sub New()
Me.Size = New Size(300, 300)
Dim ComboBox1 As New CustomComboBox()
Controls.Add(ComboBox1)
End Sub
<STAThread()> _
Shared Sub Main()
' The call to EnableVisualStyles below does not affect
' whether ComboBoxRenderer.IsSupported is true; as long as visual
' styles are enabled by the operating system, IsSupported is true.
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
Public Class CustomComboBox
Inherits Control
Private arrowSize As Size
Private arrowRectangle As Rectangle
Private topTextBoxRectangle As Rectangle
Private bottomTextBoxRectangle As Rectangle
Private textBoxState As ComboBoxState = ComboBoxState.Normal
Private arrowState As ComboBoxState = ComboBoxState.Normal
Private bottomText As String = "Using ComboBoxRenderer"
Private isActivated As Boolean = False
Private minHeight As Integer = 38
Private minWidth As Integer = 40
Public Sub New()
Me.Location = New Point(10, 10)
Me.Size = New Size(140, 38)
Me.Font = SystemFonts.IconTitleFont
Me.Text = "Click the button"
' Initialize the rectangles to look like the standard combo
' box control.
arrowSize = New Size(18, 20)
arrowRectangle = New Rectangle(Me.ClientRectangle.X + _
Me.ClientRectangle.Width - arrowSize.Width - 1, _
Me.ClientRectangle.Y + 1, arrowSize.Width, _
arrowSize.Height)
topTextBoxRectangle = New Rectangle(Me.ClientRectangle.X, _
Me.ClientRectangle.Y, Me.ClientRectangle.Width, _
arrowSize.Height + 2)
bottomTextBoxRectangle = New Rectangle(Me.ClientRectangle.X, _
Me.ClientRectangle.Y + topTextBoxRectangle.Height, _
Me.ClientRectangle.Width, topTextBoxRectangle.Height - 6)
End Sub
' Draw the combo box in the current state.
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
If Not ComboBoxRenderer.IsSupported Then
Me.Parent.Text = "Visual Styles Disabled"
Return
End If
Me.Parent.Text = "CustomComboBox Enabled"
' Always draw the main text box and drop down arrow in their
' current states.
ComboBoxRenderer.DrawTextBox(e.Graphics, topTextBoxRectangle, _
Me.Text, Me.Font, textBoxState)
ComboBoxRenderer.DrawDropDownButton(e.Graphics, arrowRectangle, _
arrowState)
' Only draw the bottom text box if the arrow has been clicked.
If isActivated Then
ComboBoxRenderer.DrawTextBox(e.Graphics, _
bottomTextBoxRectangle, bottomText, Me.Font, textBoxState)
End If
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
MyBase.OnMouseDown(e)
' Check whether the user clicked the arrow.
If arrowRectangle.Contains(e.Location) And _
ComboBoxRenderer.IsSupported Then
' Draw the arrow in the pressed state.
arrowState = ComboBoxState.Pressed
' The user has activated the combo box.
If Not isActivated Then
Me.Text = "Clicked!"
textBoxState = ComboBoxState.Pressed
isActivated = True
' The user has deactivated the combo box.
Else
Me.Text = "Click here"
textBoxState = ComboBoxState.Normal
isActivated = False
End If
' Redraw the control.
Invalidate()
End If
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)
If arrowRectangle.Contains(e.Location) And _
ComboBoxRenderer.IsSupported Then
arrowState = ComboBoxState.Normal
Invalidate()
End If
End Sub
End Class
End Namespace
注解
类 ComboBoxRenderer 提供了一组 static
方法,这些方法可用于使用操作系统的当前视觉样式呈现组合框控件。 呈现控件是指绘制控件的用户界面。 如果要绘制应具有当前视觉样式外观的自定义控件,这非常有用。 若要绘制组合框,请使用 方法绘制文本框,使用 DrawTextBoxDrawDropDownButton 方法绘制下拉箭头。
如果在操作系统中启用了视觉样式,并且视觉样式应用于应用程序窗口的工作区, DrawTextBox 并且 DrawDropDownButton 将使用当前视觉样式绘制组合框。 否则,这些方法将引发 InvalidOperationException。 若要确定是否可以使用此类的成员,可以检查 属性的值 IsSupported 。
此类包装 设置为 由 和 System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox.TextEdit 类公开的元素之一的 的功能。System.Windows.Forms.VisualStyles.VisualStyleRendererSystem.Windows.Forms.VisualStyles.VisualStyleElement.ComboBox.DropDownButton 有关详细信息,请参阅使用视觉样式呈现控件。
属性
IsSupported |
获取一个值,该值指示是否可使用 ComboBoxRenderer 类以视觉样式绘制组合框。 |
方法
DrawDropDownButton(Graphics, Rectangle, ComboBoxState) |
使用操作系统当前视觉样式绘制一个下拉箭头。 |
DrawTextBox(Graphics, Rectangle, ComboBoxState) |
在指定边界内绘制指定状态的文本框。 |
DrawTextBox(Graphics, Rectangle, String, Font, ComboBoxState) |
使用指定文本在指定边界内绘制指定状态的文本框。 |
DrawTextBox(Graphics, Rectangle, String, Font, Rectangle, ComboBoxState) |
使用指定的文本和文本边界在指定边界内绘制指定状态的文本框。 |
DrawTextBox(Graphics, Rectangle, String, Font, Rectangle, TextFormatFlags, ComboBoxState) |
使用指定的文本、文本格式和文本边界在指定边界内绘制指定状态的文本框。 |
DrawTextBox(Graphics, Rectangle, String, Font, TextFormatFlags, ComboBoxState) |
使用指定的文本和文本格式在指定边界内绘制指定状态的文本框。 |