C#学习笔记——(27)用户自定义控件创建使用

自定义控件/组件的方法

1、在上一次的笔记中提到了自定义控件的方法,这种方法是自定义的Windows窗体控件库,最后在/Bin文件下生成的是.dll格式文件,将其拖到要使用项目的【工具箱】里就可以直接使用了。

2、本次将记录另一种自定义控件的方法,是在自己写好代码后,编译整个项目,可以直接在工具栏中看到它,没有dll文件,不需要自己添加到工具箱。

从使用上来看,第一种是专门写给别人用的又不想给别人看代码,则在建立项目时直接选择建立用户自定义控件。第二种则直接在项目里建立一个组件,方便维护代码。参考博客

自定义控件过程

第一步:新建窗体应用程序
在这里插入图片描述
第二步:在解决方案资源管理器,右键添加->用户控件
在这里插入图片描述
在这里插入图片描述
在资源管理器中就添加了控件了,如下面红框所示:
在这里插入图片描述
设计页面是这样的,然后就可以写自己的控件代码了:
在这里插入图片描述
如果需要添加类则可以同上面,添加->新建项->类
在这里插入图片描述
例子的整体结构是这样子的,其中控件代码在UserControl1中写,MyComman和DrawComman是控件需要用到的两个类,Form1中是写窗体代码的:
在这里插入图片描述
第三步:写好控件代码后,运行,则可以看到【工具箱】部分出现自定义组件,这时候就可以拖动到窗体使用了
在这里插入图片描述

遇到的问题

在自定义控件的时候,遇到一些问题,这里也记录一下(本次自定义控件的功能是画出坐标格,然后在Form程序中给随机数,通过定时器来实时画折线图):
1、写好代码,工具箱找中也成功添加后,拖动控件到窗口,控件什么也不显示,运行也是空白:
在这里插入图片描述
解决:问题出在自定义控件的初始化(在UserControl1.Designer.cs中),如下面所示,注释的是原来错误的,和正确的对比,少了SizeChanged和Paint,所以在运行时,控件并没有画坐标格。

private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // UserControl1
            // 
            //this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            //this.Margin = new System.Windows.Forms.Padding(4);
            //this.Name = "UserControl1";
            //this.Size = new System.Drawing.Size(200, 188);
            //this.ResumeLayout(false);
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Margin = new System.Windows.Forms.Padding(4);
            this.Name = "UserControl1";
            this.Size = new System.Drawing.Size(200, 188);
            this.SizeChanged += new System.EventHandler(this.UserControl1_SizeChanged);
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserControl1_Paint);
            this.ResumeLayout(false);
        }

更改后,从工具箱中拖动出来的控件可以正常显示:
在这里插入图片描述
2、例子还要实现实时画图的功能,但是运行后发现没有任何变化,因此思考是定时器的问题
解决:在Form1.Designer.cs中,定时器初始化有问题,刚开始不能正常工作是因为少了Tick。

 // timer1
            // 
            this.timer1.Enabled = true;
            this.timer1.Interval = 1000;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick); //要加上这句
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值