解析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 = 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();
}
}

第四步:测试控件
按F5启动调试,弹出如下窗体:

单击“打开”按钮,弹出打开文件对话框:

选择一张图片,单击“打开”,可以看到在picBox上显示了打开的图片:

第五步:查看成生的控件文件,到该项目文件目录下的bin->debug中可找到。

下篇:控件测试

第一步:新建一个C# Windows 应用程序,名为TestMyButton.

第二步:增加自定义的用户控件

右键单击工具箱中任意一个控件,弹出右键菜单如下:

单击“选择项”,弹出如下对话框:

单击“浏览”,弹出打开对话框:

选中控件文件 mybutton.dll ,单击“打开”按钮,回到自定义工具箱,系统会默认把你刚才选中的控件打上勾。

返回vs编辑器,可看到工具箱中多出了一个UserControl:

第三步:拖动1个自定义的控件到测试窗口

第四步 测试程序

单击“打开”按钮:

选择一个图片,打开,显示该图:

测试成功。

(0)

相关推荐

  • C#中设置textbox限制条件的方法

    本文实例讲述了C#中设置textbox限制条件的方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: #region 设置数量等textbox控件样式及限制条件(具体调用的方法就是重写或直接调用ShieldNumberTextBoxOtherKeys函数) /// <summary> /// 屏蔽数字textbox的其他字符串 /// </summary> /// <param name="sender"></param>

  • C#自定义控件添加右键菜单的方法

    C#自定义控件添加右键菜单非常简单,主要用到控件,像control定义右键菜单,用items.add()叠加右键菜单内容,用click事件处理函数. 1.control是要定义右键菜单的控件. private void control_MouseDown(object sender, MouseEventArgs e) {    if (e.Button == MouseButtons.Right)    {        ContextMenu menu = new rightClickMen

  • C# TextBox 扩展方法数据验证详细说明

    查看公司项目代码时,存在这样一个问题:winform界面上有很多信息填写,提交后台服务器更新,但数据的合法验证及值的转换却不太敢恭维,一堆的if判断和转换,便想着是否能扩展个方法出来,琢磨出个思路,记录下来与大家共同探讨,有不对的地方还请大家指正. 设计思路: 1. 由于大部分从TextBox控件中获取数据值,可以扩展个泛型方法出来,直接根据转换后的数据类型获得值,类似这样, var value = this.txtSample.GetValue<int>(); 2. 可以传入一个委托用来处理

  • C#自定义控件实现TextBox禁止粘贴的方法

    本文实例讲述了C#自定义控件实现TextBox禁止粘贴的方法.分享给大家供大家参考,具体如下: 开发环境:Visual Studio .net 2005 + Windows XP sp2 professional 新建->项目->Windows控件库: 新建一个类,继承自TextBox类,具体源代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawi

  • C#递归遍历窗体所有textbox控件并设置textbox事件的方法

    本文实例讲述了C#递归遍历窗体所有textbox控件并设置textbox事件的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public virtual void SetTextBo

  • C#中TextBox实现输入提示功能的方法

    本文实例讲述了C#中TextBox实现输入提示功能的方法.分享给大家供大家参考.具体如下: 设置TextBox的AutoCompleteSource的属性为CustomSource,设置TextBox的AutoCompleteMode属性为SuggestAppend. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawin

  • C#实现用户自定义控件中嵌入自己的图标

    本文实例讲述了C#实现用户自定义控件中嵌入自己的图标.分享给大家供大家参考,具体如下: 下面给出一下具体的步骤. 1. 新建一个用户控件 2. 向资源文件是添加一张图片,图片格式可以是bm,ico 大小最好是 16 * 16 啦! 3. 选中用户控件图标,单击"右键>属性"把 "生成操作 的属性值改为:嵌入的资源(Action Resource) 4. 第四步: [ToolboxBitmap(typeof(CutPitureNew_WPF), "CutPitu

  • C# TextBox控件实现只能输入数字的方法

    只需要在控件TextBox的keypress事件中写入如下代码即可满足要求: 代码如下: 复制代码 代码如下: if (e.KeyChar == '.' && this.txbEnd.Text.IndexOf(".") != -1)             {                 e.Handled = true;             } if (!((e.KeyChar >= 48 && e.KeyChar <= 57) |

  • C#与js实现去除textbox文本框里面重复记录的方法

    本文以实例形式展示了C#与js实现去除textbox文本框里面重复记录的方法!具体方法如下: 现有如下问题:页面有一个textbox文本框(是多行的),比如我在文本框里面输入:111,222,333,555当再输入111的时候会自动清除掉这个111,或者是在提交一个按钮前清除掉这个相同记录! 解决方案如下: 以逗号分割成一个数组 有一个Split()方法 然后比较 里面相等的就删除掉后面的那个 形成新的实例 再把新实例按格式输进来~ C#代码如下: string temp_str = "111,

  • C#实现绑定DataGridView与TextBox之间关联的方法

    本文实例讲述了C#实现绑定DataGridView与TextBox之间关联的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace System.Window

  • C#自定义控件VS用户控件

    C#中自定义控件VS用户控件大比拼 1 自定义控件与用户控件区别 WinForm中, 用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件 自定义控件(Custom Control):继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件 2 要开发自己的控件的几种方法[1] 复合控件(Composite Controls):将现有的各种

  • C#禁止textbox复制、粘贴、剪切及鼠标右键的方法

    本文实例讲述了C#禁止textbox复制.粘贴.剪切及鼠标右键的方法.分享给大家供大家参考.具体如下: class MyTextBox : System.Windows.Forms.TextBox { protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg != 0x007B && m.Msg != 0x0301 && m.Msg != 0x0302) { base.Wn

随机推荐