白话Programming
博客园
首页
新随笔
联系
订阅
管理
随笔 - 44 文章 - 0 评论 - 304 trackbacks - 88
<
2006年12月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
本博客上的所有文章如非特别说明均为原创,如果要转载请注明文章出处。
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(20)
给我留言
查看留言
我参加的小组
WinForms
我参与的团队
.NET 控件与组件开发(0/1386)
微软(西安).NET开发俱乐部(0/749)
随笔分类
(40)
.Net Framework(11)
ASP.net(3)
C#(4)
Miscellaneous(3)
NHibernate(2)
Windows Workflow Foundation(1)
WinForm Control(16)
随笔档案
(44)
2008年3月 (1)
2007年5月 (2)
2007年3月 (5)
2007年2月 (4)
2007年1月 (3)
2006年12月 (15)
2006年11月 (4)
2006年3月 (3)
2005年11月 (4)
2005年10月 (3)
文章分类
ASP.net
JavaScript
Visual C#
Visual C++
联系我
MSN:
友情链接
积分与排名
积分 - 173668
排名 - 207
最新评论
1. re: WinForm控件开发总结(四)-----控件属性的串行化
楼主大善
--良子923
2. re: 使用OleDbCommandBuilder时出现“Insert into 语句的语法错误”的解决方法
楼主,你真是大好人啦,这个问题郁闷了我好久好久啊,看了你的文章,问题解决了,我加了前辍和后辍后,语法问题没有再出现,好感激啊,真的好感激.
--大卫哥
3. re: 构建插件式的应用程序框架目录
很好很全面。。学习..............
--怪虎
4. re: 制作VS风格的Toolbox控件
多谢,多谢,希望多多交流。
--云归处
5. re: WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器
不会对啊 控件就生成不出来啊
--winform
阅读排行榜
1. 构建插件式的应用程序框架(一)----开篇(9962)
2. WinForm控件开发总结(一)------开篇(9126)
3. 构建插件式的应用程序框架(三)----动态加载(8947)
4. 构建插件式的应用程序框架(二)----订立契约(8914)
5. 构建插件式的应用程序框架(四)----服务容器(8417)
6. WinForm控件开发总结(二)------使用和调试自定义控件(6907)
7. WinForm控件开发总结(三)------认识WinForm控件常用的Attribute(6602)
8. 制作VS风格的Toolbox控件(6297)
9. WinForm控件开发总结(四)-----控件属性的串行化(6225)
10. WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器(6209)
评论排行榜
1. WinForm控件开发总结(一)------开篇(27)
2. 制作VS风格的Toolbox控件(19)
3. 构建插件式的应用程序框架(二)----订立契约(18)
4. 构建插件式的应用程序框架(六)----通讯机制(17)
5. 构建插件式的应用程序框架(五)----管理插件(16)
WinForm控件开发总结(一)------开篇
我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件。在自己开发
WinForm
控件的时候,没有太多可以借鉴的资料,只能盯着
MSDN
使劲看,还好总算有些收获。现在我会把这些经验陆陆续续的总结出来,写成一系列方章,希望对看到的朋友有所帮助。今天我来开个头。
其实开发
WinForm
控件并不是很复杂,
.NET
为我们提供了丰富的底层支持。如果你有
MFC或者API图形界面
的开发经验,那么学会
WinForm
控件可能只需要很短的时间
就够了。
自己开发的
WinForm
控件通常有三种类型:复合控件(
Composite Controls
),扩展控件(
Extended Controls
),自定义控件(
Custom Controls
)。
复合控件
:将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。
扩展控件
:在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或者修改原有控件的控能。
自定义控件
:直接从
System.Windows.Forms.Control
类派生出来。
Control
类提供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的方法,但是对开发者的要求也比较高,你必须为
Control
类的
OnPaint
事件写代码,你也可以重写
Control
类的
WndProc
方法,处理更底层的
Windows
消息,所以你应该了解
GDI
+和
Windows API
。
本系列文章主要介绍自定义控件的开发方法。
控件(可视化的)的基本特征:
1.
可视化。
2.
可以与用户进行交互,比如通过键盘和鼠标。
3.
暴露出一组属性和方法供开发人员使用。
4.
暴露出一组事件供开发人员使用。
5.
控件属性的可持久化。
6.
可发布和可重用。
这
些特征是我自己总结出来,不一定准确,或者还有遗漏,但是基本上概括了控件的主要方面。
接下来我们做一个简单的控件来增强一下感性认识。首先启动
VS2005
创建一个
ClassLibrary
工程,命名为
CustomControlSample
,
VS
会自动为我们创建一个
solution
与这个工程同名,然后删掉自动生成的
Class1.cs
文件,最后在
Solution explorer
里右键点击
CustomControlSample
工程选择
Add->Classes…
添加一个新类,将文件的名称命名为
FirstControl
。下边是代码:
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Windows.Forms;
using
System.ComponentModel;
using
System.Drawing;
namespace
CustomControlSample
{
public
class
FirstControl : Control
{
public
FirstControl()
{
}
//
ContentAlignment is an enumeration defined in the System.Drawing
//
namespace that specifies the alignment of content on a drawing
//
surface.
private
ContentAlignment alignmentValue
=
ContentAlignment.MiddleLeft;
[
Category(
"
Alignment
"
),
Description(
"
Specifies the alignment of text.
"
)
]
public
ContentAlignment TextAlignment
{
get
{
return
alignmentValue;
}
set
{
alignmentValue
=
value;
//
The Invalidate method invokes the OnPaint method described
//
in step 3.
Invalidate();
}
}
protected
override
void
OnPaint(PaintEventArgs e)
{
base
.OnPaint(e);
StringFormat style
=
new
StringFormat();
style.Alignment
=
StringAlignment.Near;
switch
(alignmentValue)
{
case
ContentAlignment.MiddleLeft:
style.Alignment
=
StringAlignment.Near;
break
;
case
ContentAlignment.MiddleRight:
style.Alignment
=
StringAlignment.Far;
break
;
case
ContentAlignment.MiddleCenter:
style.Alignment
=
StringAlignment.Center;
break
;
}
//
Call the DrawString method of the System.Drawing class to write
//
text. Text and ClientRectangle are properties inherited from
//
Control.
e.Graphics.DrawString(
Text,
Font,
new
SolidBrush(ForeColor),
ClientRectangle, style);
}
}
}
晚了,今天写到这里,下一篇文章介绍怎样使用我们写好的控件。
posted on 2006-12-04 23:03
纶巾客
阅读(9126)
评论(27)
编辑
收藏
网摘
所属分类:
WinForm Control
FeedBack:
#1楼
2006-12-04 23:21
木野狐
虽然我不是专门做 winform, 关注一下。
回复
引用
查看
#2楼
2006-12-04 23:46
Justin
个人对开发控件比较感兴趣,支持一下!
回复
引用
查看
#3楼
[
楼主
] 2006-12-04 23:56
纶巾客
多谢各位支持,我会继续努力。
回复
引用
查看
#4楼
2006-12-05 01:28
航天奇侠
加油~~~~~
感觉只有自己写控件,才能真正掌握ui.
请留意一下,关于窗体的自动适应功能是怎么回事。
回复
引用
查看
#5楼
2006-12-05 10:07
scotoma
关注期待您的下一篇文章.
回复
引用
查看
#6楼
2006-12-05 11:06
white.wu
Good , Go on
回复
引用
查看
#7楼
2006-12-05 12:44
牧野
期待续篇.
回复
引用
查看
#8楼
2006-12-05 13:35
新型报表工具 xdesigner
顶,支持,.NET不是只能用来开发WEB程序的。
回复
引用
查看
#9楼
2007-01-11 07:48
二手的程序员
Mark
回复
引用
查看
#10楼
2007-01-12 13:40
网上飘 [未注册用户]
楼主,谢谢,引用你的文章
回复
引用
#11楼
2007-02-14 22:27
Bention
写得不错,让俺想起了以前vb6时代的自定义控件
[quote] 3. 暴露出一组属性和方法供开发人员使用。
4. 暴露出一组事件供开发人员使用。
[/quote]
:),嘿嘿,这里的暴露让俺想歪了,原来是提供的意思
回复
引用
查看
#12楼
2007-03-08 10:47
Spencer [未注册用户]
如果早两三个月看到你的文章就好了
那时我刚开始学习怎么写控件
一开始公司就让我写一个ListBox
之前对控件开发就是一无所知
经过一个月的努力终于是写出来了
回复
引用
#13楼
2007-04-03 14:28
gislqy [未注册用户]
谢谢楼主,楼主继续!!!
回复
引用
#14楼
2007-05-22 09:42
a [未注册用户]
好像编译出错啊.
回复
引用
#15楼
2007-07-16 15:31
snowounce [未注册用户]
请问我按照楼主的办法建立了classlibrary后,引用了System.Windows.Forms和System.Drawing 编译后说无法启动"带有类库输出类型"的项目.
后来我又加了一个应用程序的solution,可以编译了,但是在把生成的dll加入toolbox的时候却说没有可放置在toolbox上的组件,
是为什么请楼主,和各位大虾帮忙!
回复
引用
#16楼
2007-08-07 14:24
jimfire [未注册用户]
http://www.cnblogs.com/guanjinke/archive/2006/12/04/582084.html
通过学习你的文章。我根本没有办法把你的dll放到toolbox上。
回复
引用
#17楼
2007-08-07 16:16
jimfire [未注册用户]
明白了,原来没有在class前面加public关键字。
回复
引用
#18楼
2007-09-12 10:47
IAmPeter [未注册用户]
这个东西要顶!!
回复
引用
#19楼
2007-10-24 07:59
scotoma
楼主真强悍呵呵..........
谢谢楼主的共享精神
回复
引用
查看
#20楼
2008-07-23 09:10
蓝海豚 [未注册用户]
谢谢,支持一下.
回复
引用
#21楼
2008-08-07 16:30
w_wuqihua [未注册用户]
谢谢 老兄的发这篇文章
回复
引用
#22楼
2008-08-16 10:50
winform [未注册用户]
楼主 下一篇呢? 学习中呀
回复
引用
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关链接:
所属分类的其他文章:
WinForm控件开发总结(十二)-----让控件处理导航键
WinForm控件开发总结目录
WinForm控件开发总结(十一)-----调试控件的设计时行为
制作VS风格的Toolbox控件
WinForm控件开发总结(十)-----为属性设置默认值
WinForm控件开发总结(九)-----为属性提下拉式属性编辑器
WinForm控件开发总结(八)-----为属性提供弹出式编辑对话框
WinForm控件开发总结(七)-----为复杂属性的子属性提供编辑功能
WinForm控件开发总结(六)-----控件属性类型转换器代码详解
WinForm控件开发总结(五)-----为控件的复杂属性提供类型转换器
最新IT新闻:
Gartner:未来3年十大战略技术 虚拟化居首
微软明年关闭MSN群组 Windows Live将取而代之
当前国内最易倒闭的四类网站 视频居首
最富有科技公司:中移动310亿美元居首
华盛顿抛弃微软Office 选择Google Apps