WinForm自定义控件应用实例

45 篇文章 1 订阅
10 篇文章 0 订阅

WinForm自定义控件应用实例
C#的WinForm有一些控件具备自绘的功能,这就意味着你可以对这些控件进行自绘,可以起到意想不到的视觉效果。本文所述的以下控件就是通过一些简单的控件转变过来的。具体示例如下:

1、横向选项卡重绘:

这里的“横向”对话框其实是通过一个TabControl进行“方向旋转”、重绘控件项等操作进行实现的。步骤如下:

①.Alignment:用于控制选项卡的方向(设置为Left)。

②.SizeMode:用于调整每个选项卡,默认是Normal(非自绘模式),此处应该设置为Fixed(固定模式),则允许自绘。

③.设置ItemSize(注意每一个选项卡因为是“横向”的,但是这些单元卡的Width或者是Height确实按照原来“竖向”的选项卡进行处理的。因此Height其实是横向选项卡的“宽度”,而Width确实选项卡的“高度”,注意不要混淆)。

④.最后重绘DrawItem,这一步也就是最重要的(为了显示文字)。每次Draw_Item会在创建了TabPage之后被调用。此时你应该设定绘制文字的起始点(定义X,Y)。

具体实现代码如下:

C#部分代码:

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawFocusRectangle();
e.DrawBackground();
e.Graphics.DrawString(“标签” + (e.Index + 1), SystemFonts.DefaultFont, Brushes.Black, new PointF(e.Bounds.X + 5, e.Bounds.Y +
5));
}

VB.NET页面部分代码:

Private Sub tabControl1_DrawItem(sender As Object, e As DrawItemEventArgs)
e.DrawFocusRectangle()
e.DrawBackground()
e.Graphics.DrawString(“标签” & Convert.ToString((e.Index + 1)), SystemFonts.DefaultFont, Brushes.Black, New PointF(e.Bounds.X + 5, e.Bounds.Y + 5))
End Sub

注意:程序的DrawFocusRectangle和DrawBackGound分别是绘制聚焦虚框和选定一个选项卡之后背景变成蓝色。如果省略则无法呈现选中的效果。

2、颜色选项卡重绘:

Combobox和TabControl一样每一个Item都可以重绘。重要属性如下:

①.ItemHeight:设置每项项目的重绘高度。

②.DrawMode:重绘样式(分为:Normal一般模式,不支持重绘;OwnerDrawFixed:自绘模式,固定高度,OwnerDrawVariable:自绘模式,可以在MesureItem中重新为每一项调整高度进行绘制)。

③.重绘Draw_Item。

全部代码如下:

C#部分代码:

public partial class Form1 : Form
{
///
/// 绑定下拉列表的Color类
///
private class ColorInfo
{
///
/// 颜色名称
///
public string ColorName { get; set; }
///
/// 对应的Color实体
///
public Color Color { get; set; }

public static List GetAllColors()
{
Color c = new Color();
List Colors = new List();
foreach (var item in c.GetType().GetProperties())
{
//排除非颜色的情况
if (item.GetValue(c, null) is Color)
{
Colors.Add(new ColorInfo { ColorName = item.Name, Color = (Color)item.GetValue(c, null) });
}
}
return Colors;
}

}

public Form1()
{
InitializeComponent();
comboBox1.DataSource = ColorInfo.GetAllColors();
comboBox1.DisplayMember = “ColorName”;
comboBox1.ValueMember = “Color”;
}

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
//绘制空心矩形框,起始点(0,5),宽度60,高度10
Rectangle r = new Rectangle(e.Bounds.X, e.Bounds.Y+5, 60, 10);
//外框是黑色
e.Graphics.DrawRectangle(new Pen(Color.Black),r);
//内框用枚举出来的颜色填充
e.Graphics.FillRectangle(new SolidBrush((comboBox1.DataSource as List)[e.Index].Color), r);
//绘制颜色名称,起始点每项都是Item中(70,5)
e.Graphics.DrawString((comboBox1.DataSource as List)[e.Index].ColorName, SystemFonts.DefaultFont, Brushes.Black, new PointF(e.Bounds.X + 70, e.Bounds.Y + 5));
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值