当前位置:  编程技术>.net/c#/asp.net

WinForm自定义控件应用实例

    来源: 互联网  发布时间:2014-11-01

    本文导语:  C#的WinForm有一些控件具备自绘的功能,这就意味着你可以对这些控件进行自绘,可以起到意想不到的视觉效果。本文所述的以下控件就是通过一些简单的控件转变过来的。具体示例如下: 1、横向选项卡重绘: 这里的“横向”...

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));
}

}

VB.NET页面部分代码:

Public Partial Class Form1
  Inherits Form
  ''' 
  ''' 绑定下拉列表的Color类
  ''' 
  Private Class ColorInfo
    ''' 
    ''' 颜色名称
    ''' 
    Public Property ColorName() As String
      Get
        Return m_ColorName
      End Get
      Set
        m_ColorName = Value
      End Set
    End Property
    Private m_ColorName As String
    ''' 
    ''' 对应的Color实体
    ''' 
    Public Property Color() As Color
      Get
        Return m_Color
      End Get
      Set
        m_Color = Value
      End Set
    End Property
    Private m_Color As Color

    Public Shared Function GetAllColors() As List(Of ColorInfo)
      Dim c As New Color()
      Dim Colors As New List(Of ColorInfo)()
      For Each item As var In c.[GetType]().GetProperties()
        '排除非颜色的情况
        If TypeOf item.GetValue(c, Nothing) Is Color Then
          Colors.Add(New ColorInfo() With { _
            Key .ColorName = item.Name, _
            Key .Color = DirectCast(item.GetValue(c, Nothing), Color) _
          })
        End If
      Next
      Return Colors
    End Function

  End Class


  Public Sub New()
    InitializeComponent()
    comboBox1.DataSource = ColorInfo.GetAllColors()
    comboBox1.DisplayMember = "ColorName"
    comboBox1.ValueMember = "Color"
  End Sub


  Private Sub comboBox1_DrawItem(sender As Object, e As DrawItemEventArgs)
    e.DrawBackground()
    e.DrawFocusRectangle()
    '绘制空心矩形框,起始点(0,5),宽度60,高度10
    Dim r As New Rectangle(e.Bounds.X, e.Bounds.Y + 5, 60, 10)
    '外框是黑色
    e.Graphics.DrawRectangle(New Pen(Color.Black), r)
    '内框用枚举出来的颜色填充
    e.Graphics.FillRectangle(New SolidBrush(TryCast(comboBox1.DataSource, List(Of ColorInfo))(e.Index).Color), r)
    '绘制颜色名称,起始点每项都是Item中(70,5)
    e.Graphics.DrawString(TryCast(comboBox1.DataSource, List(Of ColorInfo))(e.Index).ColorName, SystemFonts.DefaultFont, Brushes.Black, New PointF(e.Bounds.X + 70, e.Bounds.Y + 5))
  End Sub
End Class

    
 
 

您可能感兴趣的文章:

  • WinForm实现移除控件某个事件的方法
  • c#实现DataGridView控件隔行变色(winform)的代码
  • WinForm DataGridView控件隔行变色的小例子
  • 深入分析C#中WinForm控件之Dock顺序调整的详解
  • 简介Winform中创建用户控件
  • WinForm的延时加载控件概述
  • WinForm子窗体访问父窗体控件的实现方法
  • WinForm自定义函数FindControl实现按名称查找控件
  • WinForm实现按名称递归查找控件的方法
  • C#中让控件全屏显示的实现代码(WinForm)
  • WinForm拖拽控件生成副本的解决方法
  • c#中多线程访问winform控件的若干问题小结
  • 在多线程中调用winform窗体控件的实现方法
  • WinForm 自动完成控件实例代码简析
  • .Net WInform开发笔记(三)谈谈自制控件(自定义控件)
  • WinForm实现同时让两个窗体有激活效果的特效实例
  • C# WinForm中Panel实现用鼠标操作滚动条的实例方法
  • winform使用委托和事件来完成两个窗体之间通信的实例
  • 关于C#.net winform程序验证moss的集成身份认证实例
  • WinForm实现拦截窗体上各个部位的点击特效实例
  • Winform 显示Gif图片的实例代码
  • C# WinForm捕获未处理的异常实例解析
  • C# WinForm开发中使用XML配置文件实例
  • WinForm项目开发中NPOI用法实例解析
  • winform树形菜单无限级分类实例
  • WinForm项目开发中Excel用法实例解析
  • WinForm之BindingSource基础操作实例教程
  • 博客 iis7站长之家
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解决C# winForm自定义鼠标样式的两种实现方法详解
  • c#多线程更新窗口(winform)GUI的数据
  • .Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用
  • C# WinForm中禁止改变窗口大小的方法
  • WinForm相对路径的陷阱
  • c# Winform 全窗口拖动的代码
  • Winform实现抓取web页面内容的方法
  • WinForm实现关闭按钮不可用或隐藏的方法
  • 解读在C#中winform程序响应键盘事件的详解
  • c# winform 关闭窗体时同时结束线程实现思路
  • WinForm实现读取Resource中文件的方法
  • C# Winform 整个窗口拖动的实现代码
  • WinForm下 TextBox只允许输入数字的小例子
  • Winform跨线程操作的简单方法
  • C# WinForm程序完全退出的问题解决
  • C# WinForm窗体编程中处理数字的正确操作方法
  • C# Winform 让整个窗口都可以拖动
  • 使用C# Winform应用程序获取网页源文件的解决方法
  • c# 天气预报查询(winform方法)的实现代码(图文)
  • C# Winform 禁止用户调整ListView的列宽
  • C# winform编程中响应回车键的实现代码
  • C#中禁止Winform窗体关闭的实现方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3