• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > WinForm自定义控件应用实例

WinForm自定义控件应用实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了winform自定义控件,winform控件自适应,c#winform自定义控件,winform timer控件,winform表格控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

</div>

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

</div>

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

2、颜色选项卡重绘:

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

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

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

③.重绘Draw_Item。

全部代码如下:

C#部分代码:

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

  public static List<ColorInfo> GetAllColors()
  {
 Color c = new Color();
 List<ColorInfo> Colors = new List<ColorInfo>();
 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<ColorInfo>)[e.Index].Color), r);
  //绘制颜色名称,起始点每项都是Item中(70,5)
  e.Graphics.DrawString((comboBox1.DataSource as List<ColorInfo>)[e.Index].ColorName, SystemFonts.DefaultFont, Brushes.Black, new PointF(e.Bounds.X + 70, e.Bounds.Y + 5));
}

}

</div>

VB.NET页面部分代码:

Public Partial Class Form1
  Inherits Form
  ''' <summary>
  ''' 绑定下拉列表的Color类
  ''' </summary>
  Private Class ColorInfo
    ''' <summary>
    ''' 颜色名称
    ''' </summary>
    Public Property ColorName() As String
      Get
        Return m_ColorName
      End Get
      Set
        m_ColorName = Value
      End Set
    End Property
    Private m_ColorName As String
    ''' <summary>
    ''' 对应的Color实体
    ''' </summary>
    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
</div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
  • WinForm实现自定义右下角提示效果的方法
  • C#的winform控件命名规范
  • WinForm的延时加载控件概述
  • WinForm自定义函数FindControl实现按名称查找控件
  • WinForm自定义控件应用实例
  • 简介Winform中创建用户控件
  • C#中让控件全屏显示的实现代码(WinForm)

相关文章

  • 2017-05-28C#浅拷贝和深拷贝实例解析
  • 2017-05-28基于C# 中可以new一个接口?的问题分析
  • 2017-05-28WPF实现类似360安全卫士界面的程序源码分享
  • 2017-05-28C#实现ProperTyGrid自定义属性的方法
  • 2017-05-28详解C#编程中异常的创建和引发以及异常处理
  • 2017-05-28C#实现登录窗口(不用隐藏)
  • 2017-05-28C#中Mutex对象用法分析
  • 2017-05-28c# 将Datatable数据导出到Excel表格中
  • 2017-05-28C#将Excel中的数据转换成DataSet
  • 2017-05-28visio二次开发--判断文档是否已发生变化(变化就加星号*)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#/Java连接sqlite与使用技巧
    • c#基础之数组与接口使用示例(遍历数组 二维数组)
    • Windows系统中使用C#读取文本文件内容的小示例
    • C#中使用强制类型实现字符串和ASCII码之间的转换
    • C#中的匿名方法实例解析
    • C#在子线程中更新窗口部件的写法
    • 浅谈Visual C#进行图像处理(读取、保存以及对像素的访问)
    • C#流类FileStream学习使用笔记
    • 测试stringbuilder运行效率示例
    • C#实现文件断点续传下载的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有