C#怎么制作用户控件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎么制作用户控件相关的知识,希望对你有一定的参考价值。
首先,准备好开发环境,启动Visual Studio.net Beta2,选择菜单文件->新建->项目,项目类型选择Visual C#项目,模板选择Windows控件库,名称输入Percent,按确定,建立一个项目。切换到Percent.cs[设计]页面,在解决方案资源管理器中将UserControl1.cs改为Percent.cs。从工具箱中拖一个 Label控制到设计面板上,设置该Label的属性:Name: lbPercent,BackColor: Transparent,Text: 100%,并拖拉Label的边框,使其大小能刚好显示出Text。右键在设计面板上单击,从弹出菜单中选择查看代码,打开代码编辑页面。
可以看到名字空间为Percent,将光标移动到public class Percent : System.Windows.Forms.UserControl以下,输入下面几行:
private int iCurPercent = 0;
private Color clPercent = Color.Blue;
private Color clText = Color.Black;
以上定义并初始化了几个私有变量,iCurPercent表示当前的百分比进度,clPercent为进度的颜色,clText为中间显示的百分比文本的颜色。
本控制拥有三个属性,分别设置进度条和文字的显示颜色,以及当前进度。还定义了一个OnPercentChange事件,在百分比改变时触发该事件。
在protected override void Dispose( bool disposing )后面添加以下内容:
public delegate void PercentChangeHandler(int CurrentPercent);
public event PercentChangeHandler OnPercentChange;public int CurrentPercent
get
return iCurPercent;
set
if ((value <= 100) && (value >= 0))
iCurPercent = value;
if (OnPercentChange != null)
OnPercentChange(iCurPercent);
this.Invalidate();
public Color PercentBackColor
get
return clPercent;
set
clPercent = value;
this.Invalidate();
public Color PercentTextColor
get
return clText;
set
clText = value;
this.Invalidate();
以上首先定义了事件,并在百分比改变时触发。然后是三个属性的实现。下面,需要在Paint事件里改变Percent控制的显示状态。切换到设计页面,选择整个设计面板,在属性视图中将光标移动到Paint,按回车,代码页面里就自动为Paint事件建立了框架,其中其一个参数为System.Windows.Forms.PaintEventArgs e,可以用这个参数干很多事情。先输入以下画百分比控制边界的代码:
Pen penBlack = new Pen(Color.Black, 1);
Point ptStart = new Point(0, 0);
Point ptEnd = new Point(this.Width - 1, 0);
e.Graphics.DrawLine(penBlack, ptStart, ptEnd);
ptStart = new Point(0, 0);
ptEnd = new Point(0, this.Height);
e.Graphics.DrawLine(penBlack, ptStart, ptEnd);Pen penWhite = new Pen(Color.White, 1);
ptStart = new Point(this.Width - 1, 0);
ptEnd = new Point(this.Width - 1, this.Height);
e.Graphics.DrawLine(penWhite, ptStart, ptEnd);
ptStart = new Point(0, this.Height - 1);
ptEnd = new Point(this.Width, this.Height - 1);
e.Graphics.DrawLine(penWhite, ptStart, ptEnd);SolidBrush brushFill = new SolidBrush(PercentBackColor);
Rectangle rcFill = new Rectangle(2, 2, iCurPercent * (this.Width - 3) / 100, this.Height - 3);
e.Graphics.FillRectangle(brushFill, rcFill);lbPercent.Left = this.Width / 2 - lbPercent.Width / 2;
lbPercent.Top = this.Height / 2 - lbPercent.Height / 2;
lbPercent.Text = iCurPercent.ToString() + "%";
lbPercent.ForeColor = PercentTextColor;在控制大小发生变化时也应该刷新,在设计页面,光标移动到Resize,回车,在Resize事件中写下:this.Invalidate();
这样,这个百分比控制就编完了。下面,我们在编写一个测试程序来测试这个控制。选择菜单:文件->添加项目->新建项目,项目类型选择 Visual C#项目,模板选择Windows应用程序,取名为TestPercent,按确定,建立一个Windows应用程序框架。由于是添加了一个新项目,因此,解决方案资源管理器中就有了两个项目:Percent和TestPercent。鼠标在TestPercent上单击右键,从弹出菜单中选择“添加引用”,切换到“项目”页面,项目名称应为“Percent”,双击该项目名称,把它加到选定的组件里面,按确定。这样,Percent组件就加到测试工程里了。用过VC的#import指令或者VB的引用的人对这个操作也许会感觉比较亲切。
从工具箱中找到Percent控制,将其拖到测试工程的设计面板上摆好,再从工具箱里拖一个Button和一个Timer放好。双击Button,在其事件中写下:timer1.Enabled = true; 再回到设计面板,双击Timer,在其事件中写下:percent1.CurrentPercent = percent1.CurrentPercent + 1;将焦点移到用户控制percent1上,找到事件OnPercentChange,回车,在程序框架中写下:this.Text = CurrentPercent.ToString(); 这样,测试程序就完成了。
下面运行程序,将TestPercent设为启动项目,运行,按下button1,可以看到进度增加的同时,窗口标题也在发生变化。
通过这个简单的用户控制的编写,我们可以体会到C#编程的简便性,对其开发环境有个基本的了解。该控制也可以很容易地被其他开发工具,比如Visual Basic.net使用。
以上程序在C366, 128MB, Windows2000 Advanced Server SP2,Visual Studio.net Beta2中文版下编译通过。 参考技术A 控件制作步骤:
第一步:新建一个控件库项目: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 = fiPicInfo.Name;
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();
参考技术B 你所说的用户控件,指的是ASP.NET里面,用的WEB用户控件,还是WinForm里面用的用户控件.这两个做法差不多.只是创建方式不一样,以及继承的基类不一样而已. 参考技术C 参考: http://www.csharpwin.com/controlsearchresult.aspx?ChID=2,里面有大量的控件。 参考技术D 自定义控件吧 网上好多 去搜索一下
WPF (C#) 用户控件删除元素
【中文标题】WPF (C#) 用户控件删除元素【英文标题】:WPF (C#) Usercontrol remove elements 【发布时间】:2021-11-26 22:03:18 【问题描述】:我正在使用 WPF(C#) 中的 Usercontrol 制作模板。
但是,在应用此用户控件时,是否可以减去特定部分?例如,移除一个按钮?
【问题讨论】:
隐藏多余的部分 我怎样才能让它隐藏,我怎样才能让它发生? 【参考方案1】:要从 UserControl 中减去特定部分,可以使用可见性(折叠、隐藏)选项。 确保在 UserControl 中添加依赖属性以显示和隐藏特定部分。
【讨论】:
我不认为向用户控件添加依赖属性来控制可见性是一个好建议。 WPF 是围绕 MVVM 构建的,MVVM 解决方案是通过绑定到视图模型来控制可见性。 @NigelBess 我不同意你的观点,用户控件必须公开必要的功能才能与之交互,.. 必要的功能已经通过绑定暴露了。无需通过为您想要控制的所有内容添加依赖属性来使事情复杂化。此外,您仍然需要访问依赖属性,无论哪种方式都应该通过绑定来完成【参考方案2】:听起来您只是想隐藏现有按钮,您应该通过将Visibility
设置为Visibility.Collapsed
或Visibility.Hidden
来做到这一点。这应该通过绑定到用户控件的 ViewModel 来完成。
如果您需要纯 XAML 解决方案:不,这样是不可能的。但是,反过来也是可能的:you can add content to a user control,它有效地提供了相同的功能。
您可以做的是制作一个不包含按钮的基本用户控件,而是有一个内容呈现器。第二个用户控件可以包装基本用户控件并将一个按钮定义为其内容。然后,当您不想将用户控件与按钮一起使用时,您可以简单地创建一个基本用户控件的实例。
【讨论】:
以上是关于C#怎么制作用户控件的主要内容,如果未能解决你的问题,请参考以下文章
C# wpf 如何实现自定义控件,布局时,大小发生变化,内部绘制的曲线跟随变化?