当前位置:文档之家› C#自定义控件开发

C#自定义控件开发

C#自定义控件开发
C#自定义控件开发

.NET4.0 用户控件的概述

https://www.doczj.com/doc/b792769.html,4.0 用户控件的概述 用户控件是页面的一段,包含了静态HTML代码和服务器控件。其优点在于一旦创建了一个用户控件,可以在同一个应用的多个页面中重用。并且,用户可以在Web用户控件中,添加该控件的属性、事件和方法。 1.什么是用户控件 用户控件(后缀名为.ascx)文件与https://www.doczj.com/doc/b792769.html,网页窗体(后缀名为.aspx)文件相似。就像网页窗体一样,用户控件由用户接口部分和控制标记组成,而且可以使用嵌入脚本或者.cs代码后置文件。用户控件能够包含网页所能包含的任何东西,包括静态HTML内容和https://www.doczj.com/doc/b792769.html,控件,它们也作为页面对象(Page Object)接收同样的事件(如Load和PreRender),也能够通过属性(如Application,Session,Request 和Response)来展示https://www.doczj.com/doc/b792769.html,内建对象。 用户控件使程序员能够很容易地跨Web应用程序划分和重复使用公共UI功能。与窗体页相同,用户可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件。 此外,用户控件可以在第一次请求时被编译并存储在服务器内存中,从而缩短以后请求的响应时间。与服务器端包含文件(SSI)相比,用户控件通过访问由https://www.doczj.com/doc/b792769.html,提供的对象模型支持,使程序员具有更大的灵活性。程序员可以对在控件中声明的任何属性进行编程,而不只是包含其他文件提供的功能,这与其他任何https://www.doczj.com/doc/b792769.html,服务器控件一样。 此外,可以独立于包含用户控件的窗体页中除该控件以外的部分来缓存该控件的输出。这一技术称作片段缓存,适当地使用该技术能够提高站点的性能。例如,如果用户控件包含提出数据库请求的https://www.doczj.com/doc/b792769.html,服务器控件,但该页的其余部分只包含文本和在服务器上运行的简单代码,则程序员可以对用户控件执行片段缓存,以改进应用程序的性能。 用户控件与普通网页页面的区别是: ●用户控件开始于控件指令而不是页面指令。 ●用户控件的文件后缀是.ascx,而不是.aspx。它的后置代码文件继承于 https://www.doczj.com/doc/b792769.html,erControl类.事实上,UserControl类和Page类都继承于同一个 TemplateControl类,所有它们能够共享很多相同的方法和事件。 ●没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义。 ●用户控件不能被客户端直接访问,不能作为独立文件运行,而必须像处理任何控件一 样,将它们添加到https://www.doczj.com/doc/b792769.html,页中。 ●用户控件没有html、body、form元素,但同样可以在用户控件上使用HTML元素和 Web控件。 用户可以将常用的内容或者控件以及控件的运行程序逻辑,设计为用户控件,

C# 自定义控件制作和使用实例

C# 自定义控件制作和使用实例 第一步:新建一个控件库项目:myControl 第二步:从工具箱里面拖动1个PictureBox、1个Button、6个Lable控件到用户界面上,布局如下: 如上图,设置pictureBox的Name为picBox,背景为白色,Button的Name为btnOpen,

另外靠左的三个Lable的Text属性分别为:文件名称,文件大小,文件尺寸,靠右的三个Lable的Name分别为:lblName, lblLength, lblSize. 第三步:添加处理程序代码 在btnOpen的Click事件写入代码,打开一个打开文件对话框,选择一个图形文件,打开并将它显示在picBox上。 private void btnOpen_Click(object sender, EventArgs e) { OpenFileDialog ofdPic = new OpenFileDialog(); ofdPic.Filter = "JPG(*.JPG;*.JPEG);gif文件(*.GIF)|*.jpg;*.jpeg;*.gif"; ofdPic.FilterIndex = 1; ofdPic.RestoreDirectory = true; ofdPic.FileName = ""; if (ofdPic.ShowDialog() == DialogResult.OK) { string sPicPaht = ofdPic.FileName.ToString(); FileInfo fiPicInfo = new FileInfo(sPicPaht); long lPicLong = fiPicInfo.Length / 1024; string sPicName = https://www.doczj.com/doc/b792769.html,; string sPicDirectory = fiPicInfo.Directory.ToString(); string sPicDirectoryPath = fiPicInfo.DirectoryName; Bitmap bmPic = new Bitmap(sPicPaht); if (lPicLong > 400) { MessageBox.Show("此文件大小為" + lPicLong + "K;已超過最大限制的K范圍!"); } else { Point ptLoction = new Point(bmPic.Size); if (ptLoction.X > picBox.Size.Width || ptLoction.Y > picBox.Size.Height) { picBox.SizeMode = PictureBoxSizeMode.Zoom; } else { picBox.SizeMode = PictureBoxSizeMode.CenterImage; } } picBox.LoadAsync(sPicPaht); lblName.Text = sPicName; lblLength.Text = lPicLong.ToString() + " KB"; lblSize.Text = bmPic.Size.Width.ToString() + "×" + bmPic.Size.Height.ToString(); }

C#自定义控件开发

自定义控件开发 一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们自己开发新的、满足用户需求的控件。(源码网整理:https://www.doczj.com/doc/b792769.html,) 要开发自己的控件,有几种方法: ?复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。 ?扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。 ?自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control 类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。 下面我们就分别给大家介绍这三种方法。 ?复合控件(Composite Controls) 复合控件实际上是控件的集合,类似于堆积木。因此,可以按照用户的需求,把VS 2005工具箱中的控件任意组合起来,形成一个复合控件。在以后使用中,将生成的这个复合控件作为一个控件来对待。 复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在“UserControl测试容器”中进行测试。 复合控件的创建步骤: 第一步:新建一个Windows控件库项目“CompositeControlDemo”

C#自定义控件实现控件随窗口大小改变

1.新建用户控件,取名MyForm。 2.将默认的UserControl改成Form 3.在类中添加以下代码 private float X, Y; //获得控件的长度、宽度、位置、字体大小的数据 private void setTag(Control cons)//Control类,定义控件的基类 { foreach (Control con in cons.Controls) { con.Tag = con.Width + ":"+ con.Height + ":"+ con.Left + ":"+ con.Top + ":" + con.Font.Size;//获取或设置包含有关控件的数据的对象

if (con.Controls.Count > 0) setTag(con);//递归算法 } } private void setControls(float newx, float newy, Control cons)//实现控件以及字体的缩放 { foreach (Control con in cons.Controls) { string[] mytag = con.Tag.ToString().Split(new char[] { ':' }); float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a; a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a); a = Convert.ToSingle(mytag[2]) * newx; con.Left = (int)(a); a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a); Single currentSize = Convert.ToSingle(mytag[4]) * newy; con.Font = new Font(https://www.doczj.com/doc/b792769.html,, currentSize, con.Font.Style, con.Font.Unit); if (con.Controls.Count > 0) { setControls(newx, newy, con);//递归 } } } private void MyForm_Resize(object sender, EventArgs e) { float newx = (this.Width) / X;//当前宽度与变化前宽度之比 float newy = this.Height / Y;//当前高度与变化前宽度之比 setControls(newx, newy, this); this.Text = this.Width.ToString() + ""+ this.Height.ToString(); //窗体标题显示长度和宽度

C#创建用户控件

演练:使用Visual C# 创作用户控件 Visual Studio .NET 2003 用户控件提供了一种创建和重用自定义图形界面的方法。用户控件本质上是具有可视化表示形式的组件。因此,它可能包含一个或多个Windows 窗体控件、组件或代码块,它们能够通过验证用户输入、修改显示属性或执行作者所需的其他任务来扩展功能。可以按照与其他控件相同的方式,将用户控件置于Windows 窗体中。在本演练的第一部分,创建一个名为ctlClock 的简单用户控件。在本演练的第二部分通过继承扩展ctlClock 的功能。 创建项目 创建新的项目时应指定其名称,以设置根命名空间、程序集名称和项目名称,并确保默认组件将位于正确的命名空间中。 创建ctlClockLib 控件库和ctlClock 控件 1.在“文件”菜单上,指向“新建”,然后选择“项目”以打开“新建项目”对话框。 2.从“C# 项目”列表中选择“Windows 控件库”项目模板,然后在“名称”框中键入ctlClockLib。 注意“Windows 控件库”模板在Visual C# .NET 的标准版中不可用。有关更多信息,请参 见Visual C# 标准版的功能。 默认情况下,项目名称ctlClockLib也被分配到根命名空间中。根命名空间用于限定程序集中的组件名。例如,如果两个程序集都提供名为ctlClock 的组件,则可以使用 ctlClockLib.ctlClock指定ctlClock 组件。在解决方案资源管理器中,右击 “UserControl1”并从快捷菜单中选择“查看代码”。 3.找到Class语句public class UserControl1,将UserControl1更改为ctlClock 以更改组件的名称。 注意默认情况下,用户控件从系统提供的UserControl类继承。UserControl类提供所 有用户控件要求的功能,并实现标准方法和属性。 4.找到构造函数public UserControl1(),将UserControl1 更改为ctlClock。 5.在解决方案资源管理器中,单击“UserControl1”,然后在“属性”窗口中,将FileName属性 更改为ctlClock.cs。 6.从“文件”菜单中,选择“全部保存”来保存项目。 将Windows 控件和组件添加到用户控件

Web用户自定义控件的开发

子任务2:页面顶部和底部设计(https://www.doczj.com/doc/b792769.html, Web服务器控件实现) 对于页面顶部控件WebUserControl.ascx和页面底部控件WebUserControl2.ascx,添加https://www.doczj.com/doc/b792769.html, Web服务器控件来实现设计效果。 (1)启动Visual Studio2008,打开网站文件Website1。 (2)单击“添加新项”按钮,在弹出的窗口中选择“Web用户控件”,然后单击“添加”按钮即可为当前网站文件添加一个用户自定义控件,该控件的名称为:WebUserControl.ascx。 (3)在控件添加完成后,系统自动打开该控件的设计窗口,有“设计”模式和“源”模式两种模式可供开发人员使用。 (4)切换到“设计”模式,为WebUserControl添加一个Table控件,在属性窗口设置Rows属性值,如图2-30所示。 图2-30 Table控件的属性窗口 (5)在打开的“TableRow集合编辑器”窗口为Table添加1个TableRow,如图2-31所示。

图2-31 “TableRow集合编辑器”窗口图2-32 “TableCell集合编辑器”窗口(6)再单击Cells,在打开的“TableCell集合编辑器”窗口为TableRow添加2个TableCell,如图2-32所示。 (7)然后切换到“源”模式,编写https://www.doczj.com/doc/b792769.html,代码,为每一个TableCell分别添加一个Image控件,设置其属性,相关代码如下。 (8)切换到“设计”模式,为WebUserControl2再添加一个Table控件,并设置其为1个TableRow,6个TableCell。 (9)切换到“源”模式,编写https://www.doczj.com/doc/b792769.html,代码,为每一个TableCell分别添加一个HyperLink 超链接控件,相关代码如下:

C#自定义控件的详细的开发流程(程序和图解)1

C#中自定义控件开发 要开发自己的控件,有几种方法: ?复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。 ?扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。 ?自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control 类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。 下面我们就分别给大家介绍这三种方法。 ?复合控件(Composite Controls) 复合控件实际上是控件的集合,类似于堆积木。因此,可以按照用户的需求,把VS 2005工具箱中的控件任意组合起来,形成一个复合控件。在以后使用中,将生成的这个复合控件作为一个控件来对待。 复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在“UserControl测试容器”中进行测试。 复合控件的创建步骤: 第一步:新建一个Windows控件库项目“CompositeControlDemo” 第二步:向复合控件中添加Visual Studio 2005中的控件组合。

C#制作WinForm用户自定义控件实例教程

C#制作WinForm用户自定义控件实例教程 本文将教大家如何使用C#开发WinForm用户自定义控件,自定义控件有好多好处,下面请跟本文一同来学习下吧。 .Nt用户自定义控件继承UserControl类,设计很简单的,像平时在窗体上拖控件一样。 操作步骤: 1. 建立一个工程,添加用户控件。 2.在打开的窗体内输入控件名称,如:"ucButton",按确定按钮。接下来在空白区域拖放3个.Net控件。 如下图:

3.代码 C# code ///

/// C#.Net 设计用户自定义控件 /// /// [ToolboxBitmap(typeof(CustomControl.ucButton), "ucButton.bmp")] public partial class ucButton : UserControl { private bool _IsFocused = false; //标记按钮是否为焦点状态 public ucButton() { InitializeComponent(); this.DoHideFocusedTag(); this.MyCatpionText = https://www.doczj.com/doc/b792769.html,; } private EventHandler _OnButtonClick = null; private string _MyCatpionText = "ucButton1"; /// /// 按钮标题 /// [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] [DefaultValue("ucButton1")] public string MyCatpionText { get { return _MyCatpionText; } set { _MyCatpionText = value; lblCaption.Text = _MyCatpionText; } } /// /// 用户自定义Click事件 /// [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] public event EventHandler OnButtonClick { add { _OnButtonClick = new EventHandler(value); } remove { _OnButtonClick -= new EventHandler(value); } } private void lblCaption_Click(object sender, EventArgs e) { //转移Click事件, 触发用户自定义事件 if (_OnButtonClick != null) _OnButtonClick(this, e); } private void lblCaption_MouseDown(object sender, MouseEventArgs e) { if (_IsFocused) { lblCaption.Font = new Font(lblCaption.Font.FontFamily, lblCaption.Font.Size, FontStyle.Bold); } } private void lblCaption_MouseUp(object sender, MouseEventArgs e) { if (_IsFocused) { lblCaption.Font = new Font(lblCaption.Font.FontFamily, lblCaption.Font.Size, FontStyle.Regular); } } private void ucButton_SizeChanged(object sender, EventArgs e) { lblUnderLine.Top = this.Height - 1; lblUnderLine.Width = this.Width - 15; } /// /// 还原按钮状态 /// public void DoHideFocusedTag() { this.pictureBox1.Image = global::vjsdn.CustomControl.Properties.Resources.GrayTag; this.lblUnderLine.Visible = false; lblCaption.ForeColor = Color.Black; } /// /// 设计按钮为焦点状态 /// public void DoShowFocusedTag() { this.pictureBox1.Image =

Vs自定义控件设计教程

Vs自定义控件设计第一例(直线控件的设计) 目录 一、杨老师是个热情的人 (1) 二、开始喽 (2) 三、还需要些解释什么吗 (7) 四、OK了吗 (7) 五、最终代码 (10) 一、杨老师是个热情的人 我们的项目开源有一段时间了,我一直以为我有一个很不错的胸怀把自己花了很多精力做出来的项目贡献出来了,我以为同学们会很开心,会像“一个饥饿的人看到面包”一样的扑到了我的项目代码上面快乐的研究起来,但是事实上我们的群里面却异常的冷清。我想应该是大家都还在研究代码来不及说话或者是不爱说话吧,直到今天杨老师给我打电话,说了一些实情,似乎是说大家还不太懂数据库等等,我才知道是我错了,生活往往是这样:你没想到的太多了……。杨老师是我最佩服的老师,他是一个充满热情的人。电话里面一直邀请我再和同学们去讲个课帮助大家看懂这些代码,可以让这个项目继续下去,这样也不枉费当初的一番好的初衷。但是我想,我可能不是一个会讲课的人,再去讲课也太正规了一点,我跟杨老师申请一个折中的办法:利用大家已经加入的QQ群,我尝试着写几个教程,跟大家一起从零开始介绍一些我的项目里面可能会用到的知识,但愿这样可以帮到大家。我不确定我能不能坚持下去(可能这也是我不敢去和同学们讲课的原因之一吧。人有时是没办法太了解自己的),但是不管怎么样,今天就从第一个开始吧。 在Microsoft Visual Studio 2012(以下简称VS)里面,有许多的控件可供日常窗体设计的需求。但是很多时候,我们需要的控件却找不到,比如:画一条直线。当然,我们也不能太苛求Microsoft,毕竟他们已经做得够好。更何况有时我们还会忘记支付他们软件使用费……。 在多年前(你们可能还不是小学生的时候,估计应该是人了)我有一个项

C#.Net用户自定义控件制作教程

Net用户自定义控件继承UserControl类,设计很简单的,像平时在窗体上拖控件一样。 下面跟着我一步步做: 1. 建立一个工程,添加用户控件。 2.在打开的窗体内输入控件名称,如:"ucButton",按确定按钮。接下来在空白区域拖放3个.Net控件。 如下图:

3.编码 代码 ///

/// C#.Net 设计用户自定义控件 /// C#制作用户自定义控件 (by https://www.doczj.com/doc/b792769.html, 易学网) /// /// [ToolboxBitmap(typeof(CustomControl.ucButton), "ucButton.bmp")] public partial class ucButton : UserControl { private bool _IsFocused = false; //标记按钮是否为焦点状态 public ucButton() { InitializeComponent(); this.DoHideFocusedTag(); this.MyCatpionText = https://www.doczj.com/doc/b792769.html,; } private EventHandler _OnButtonClick = null; private string _MyCatpionText = "ucButton1"; /// ///按钮标题 /// [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] [DefaultValue("ucButton1")] public string MyCatpionText { get { return _MyCatpionText; } set { _MyCatpionText = value; lblCaption.Text = _MyCatpionText; } } /// ///用户自定义Click事件 /// [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] public event EventHandler OnButtonClick {

自定义控件常用属性设置

ToolboxItem 有没有试过写一个用户控件后,想它不出现在工具箱中,当然有,有时候是控件的Designer部分没有写好或没写,有时候是控件一拖出来就报错,有时候是内部使用的控件,不想别人一引用DLL就出现控件。其它设置方法可以很简单。 [ToolboxItem(false)] public class MyPanel : UserControl 这样就可以了。“可恶”的用户控件就自动隐藏了,不出现在工具箱中。不过,如果你不知道这样的话,可以会引来一大堆的烦事。 ToolboxBitmap 写好一个用户控件后,在工具箱中出来的是一个蓝色的齿轮,这就不是很漂亮了,也不能够直观地表达自己的意图。如果更不幸的你的控件的名称好难认的话,其它的开发者会很麻烦的。怎样才能让用户控件在工具箱中显示不同的图标呢? [ToolboxBitmap(typeof(System.Windows.Forms.Panel))] public class MyPanel : UserControl 这样就可以了,表示,你所做的用户控件使用的图标是Panel的图标。 如果不想用系统的图标,要使用自己的图标,可以这样 [ToolboxBitmap(typeof(MyPanel), "WindowsApplication1.Images.MyPanel.bmp")] public class MyPanel : UserControl 不过,一定要注意路径,WindowsApplication1.Images.MyPanel.bmp表示,解决方案是WindowsApplication1,目录是Images,文件名是MyPanel.bmp,同时,这个图片必须是“嵌入的资源”(点击文件,右键,属性,有一个文件属性,其中,在生成操作中,可以选择"嵌入的资源") Category与Description [Category("Appearance"), Description("阴影色")] public System.Drawing.Color ShadowColor { get { …} set { …} } 这两个是经常都会写在一起的属性,Category表示类型,如属性框中所显示的外观,布局等,当然,你可以自己写一个,叫“自定义属性”,而Description就是这个属性的描述,用来说明属性有什么用途。这两个的设置相对都比较简单,可以说,一看就知道,不过提一下,Appearance是特殊的词,在属性面板中,它就是外观一栏。 DefaultValue [DefaultValue(typeof(Color), "DarkGray")] public System.Drawing.Color ShadowColor { get { …} set { …} } 用于设置默认的值,对于string,bool,int,可以直接写出来,如[DefaultValue(10)],这是可以的,不过,不是这三种类型的话,就比较麻烦,一定要先转化为string才能设置成功。如上面的DarkGray,这是系统定义的颜色,这还是比较好处理的。不过,如果是一些自定义的颜色,如颜色是128,0,128,你应该将128转为16进制,写成0x800080,前缀0x是一定要加的。最后就这样 [DefaultValue(typeof(Color), "0x800080")] Browsable 表示,是否在属性面板中显示这个属性 [Browsable(true)] 表示,将在属性面板中显示这个属性。 DesignerSerializationVisibility 表示,是否在*.Designer.cs文件中将设置的代码写出来,也就是是否要实现序列化[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

相关主题
文本预览
相关文档 最新文档