自定义Windows Forms控件

简介:

#region  示例 1 -- 拥有多列的组合框

            //  初始化DataTable:
            //  
            //  创建一个名为dtTest的数据表,为其添加2列
            //   ID:     int
            //   Name:   string
            //
            DataTable dtTest = new DataTable();
            dtTest.Columns.Add("ID", typeof(int));
            dtTest.Columns.Add("Name", typeof(string));

            dtTest.Rows.Add(1, "John");
            dtTest.Rows.Add(2, "Amy");
            dtTest.Rows.Add(3, "Tony");
            dtTest.Rows.Add(4, "Bruce");
            dtTest.Rows.Add(5, "Allen");

            // 将组合框的数据源设置为DataTable。
            this.comboBox1.DataSource = dtTest;
            this.comboBox1.DisplayMember = "Name";
            this.comboBox1.ValueMember = "ID";

            // 将组合框的 DrawMode 设置为OwnerDrawFixed。
            this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;

            // 在DrawItem事件中绘制子项。
            this.comboBox1.DrawItem += delegate(object cmb, DrawItemEventArgs args)
            {
                // 绘制默认的背景
                args.DrawBackground();

                // 因为组合框被绑定到DataTable,所以组合框的子项是DataRowView对象。
                DataRowView drv = (DataRowView)this.comboBox1.Items[args.Index];

                // 取出每一列的值。
                string id = drv["id"].ToString();
                string name = drv["name"].ToString();

                // 获得第一列的边界。
                Rectangle r1 = args.Bounds;
                r1.Width /= 2;

                // 绘制第一列的文本。
                using (SolidBrush sb = new SolidBrush(args.ForeColor))
                {
                    args.Graphics.DrawString(id, args.Font, sb, r1);
                }

                // 绘制一条分割线分割不同的列。
                using (Pen p = new Pen(Color.Black))
                {
                    args.Graphics.DrawLine(p, r1.Right, 0, r1.Right, r1.Bottom);
                }

                // 获取第二列的边界。
                Rectangle r2 = args.Bounds;
                r2.X = args.Bounds.Width/2;
                r2.Width /= 2;

                // 绘制第二列的文本。
                using (SolidBrush sb = new SolidBrush(args.ForeColor))
                {
                    args.Graphics.DrawString(name, args.Font, sb, r2);
                }
            };

            #endregion

            #region 示例 2 -- 每个列表项拥有不同提示的列表框

            // 初始化列表项。
            this.listBox1.Items.Add("Item1");
            this.listBox1.Items.Add("Item2");
            this.listBox1.Items.Add("Item3");
            this.listBox1.Items.Add("Item4");
            this.listBox1.Items.Add("Item5");

            this.listBox1.MouseMove += delegate(object lst, MouseEventArgs args)
            {
                // 获取鼠标悬停所在项的索引。
                int hoverIndex = this.listBox1.IndexFromPoint(args.Location);

                //如果鼠标悬停在列表项上,显示一个提示。
                if (hoverIndex >= 0 && hoverIndex < listBox1.Items.Count)
                {
                    this.toolTip1.SetToolTip(listBox1, listBox1.Items[hoverIndex].ToString());
                }
            };

            #endregion

            #region 示例 3 -- 只能输入数字的文本框

            // 处理TextBox.KeyPress事件,过滤输入的字符。
            this.textBox1.KeyPress += delegate(object tb, KeyPressEventArgs args)
            {
                if (!(char.IsNumber(args.KeyChar) || args.KeyChar == '\b'))
                {
                    // 如果输入字符不是数字或者回格键
                    // 则将Handled属性设置为true,目的是
                    // 表明KeyPress事件被处理过了,这将使
                    // 文本框过滤掉该输入字符。
                    args.Handled = true;
                }
            };


            #endregion




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2010/10/20/1856316.html,如需转载请自行联系原作者

相关文章
|
2月前
|
安全 C# 开发者
Windows Forms 应用开发:一分钟浅谈
本文将带领您从零开始,逐步掌握使用 C# 进行 Windows Forms 开发的技巧,包括创建首个应用、处理常见问题及优化方法。首先介绍如何搭建环境并编写基础代码,接着深入探讨控件使用与布局管理,解决控件重叠和响应式布局难题。最后讲解事件处理与多线程技术,确保长时间任务不阻塞界面,并安全更新 UI 状态,助您开发流畅的应用程序。
131 64
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
85 9
|
24天前
|
Windows
.NET 隐藏/自定义windows系统光标
【10月更文挑战第20天】在.NET中,可以使用`Cursor`类来控制光标。要隐藏光标,可将光标设置为`Cursors.None`。此外,还可以通过从文件或资源加载自定义光标来更改光标的样式。例如,在表单加载时设置`this.Cursor = Cursors.None`隐藏光标,或使用`Cursor.FromFile`方法加载自定义光标文件,也可以将光标文件添加到项目资源中并通过资源管理器加载。这些方法适用于整个表单或特定控件。
|
3月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
3月前
|
PHP 开发工具 git
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
|
3月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
231 0
|
3月前
|
安全 Shell Windows
记windows自定义bat脚本自启动
【8月更文挑战第27天】在Windows系统中,可让自定义bat脚本自启动的方法有两种:一是利用“启动”文件夹,通过创建bat脚本的快捷方式并将其放置于该文件夹;二是使用任务计划程序,创建一个启动时触发的任务来运行bat脚本。需确保脚本正确安全,避免对系统产生不良影响。
131 0
|
3月前
|
Java 应用服务中间件 Windows
【Azure 应用服务】App Service for Windows 环境中为Tomcat自定义4xx/5xx页面
【Azure 应用服务】App Service for Windows 环境中为Tomcat自定义4xx/5xx页面
|
6月前
|
存储 安全 搜索推荐
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
107 1
|
6月前
|
XML Go 数据格式
Windows自定义后台进程并设置为开机启动
可以在`Windows`上配置任意一个可执行文件后台启动,并且设置为开机启动。
Windows自定义后台进程并设置为开机启动
下一篇
无影云桌面