DIY-自定义控件

  1. VS为我们提供了大量的零碎的控件,供我们使用,但也是因为这些控件太过零碎,我们想要一些控件的组合,既然有了这种需求,那么也就一定有了这种供求,自定义控件和用户控件应运而生。
  1. 之前我们已经学过用户控件,http://blog.csdn.net/tgbsqliuying/article/details/40926591

    1. 两者区别

      1. 用户控件往往是从属于某个程序集的,并且,事件和属性都是封装在用户控件的内部,在外部往往不可对整个控件的某个成员进行操作。与其所属的程序共用一个大的环境。
      1. 自定义控件具有暴露在外界的属性和方法,并且以组件的方式供所有VS程序使用,不分编写程序的语言。相比之下,自定义控件就强大多了。
  1. 自定义控件的制作示例

    1. 推荐学习博客:http://blog.csdn.net/smallfools/article/details/5637393 写得超级不错
    1. 记得原来学习C#的时候,学到"C#中有且仅有类构成",那么C#中的控件,自然也是由类构成。类的成员变量有:字段,属性,方法,静态方法,构造函数….

那么具体到一个控件类,我们最常用的就是它的属性和方法。

  1. 在学生基础项目中,我遇到这样一个问题:就是公告详情的显示页面和任务的显示页面是非常相似的,只是有些细节不太一样。如下图所示:

    1. 那么我们是否可以将公告任务的所有成员(标题,发布时间,任务进度,公告任务的查看人,公告任务的发布人)封装为一个控件,将所有成员,作为此控件的属性,那么此控件,就可以被多个任务公告付赋值了。答案当然是可以的。

  1. 先来学习自定义控件:

    1. 那么如何定义一个控件的属性呢?
<pre name="code" class="csharp">  //框架
        private Panel _pframe = new Panel();

        //框架宽
        private Int16 _fwidth;
        [Bindable(true)]
        [Category("Data")]
        [DefaultValue("")]
        [Localizable(true)]
        public Int16 Fwidth
        {
            get { return _fwidth; }
            set { _fwidth = value; }
        }
        //框架高
        private Int16 _fheight;
        [Bindable(true)]
        [Category("Data")]
        [DefaultValue("")]
        [Localizable(true)]
        public Int16 Fheight
        {
            get { return _fheight; }
            set { _fheight = value; }
        }
        #endregion

  1. 那么如何定义一个控件的方法呢?

任务需要编辑进度,所以我们需要将进度选择框的SelectedIndexChanged方法,

<pre name="code" class="csharp">        //进度条改变的事件,属性访问权限为Public,所以此事件是此用户的控件。
        public event EventHandlerSelectedIndexChanged;
 

我们都知道,事件代码并不是已经在程序中定义好了,只有我们需要此事件时,我们才需要双击此控件,或者选择事件驱动,自动生成事件驱动代码,然后我们补充方法体,自定义控件,也提供了,这个机制:

<pre name="code" class="csharp">this._dpSchedule.SelectedIndexChanged += newEventHandler(this._dpSchedule_SelectedIndexChanged);
       //cmbox item改变事件
        private void_dpSchedule_SelectedIndexChanged(object sender, EventArgs e)
        {
            EventArgs e1 = new EventArgs();
            if (this.SelectedIndexChanged !=null)
               this.SelectedIndexChanged(SelectedIndexChanged, e1);
        }

因为自定义控件属于一个自定义控件程序,所以此程序经编译,可以生成dll组件,在工具箱引用,就能见到,使用的过程,跟VS自带控件无异。大家可以尝试一下。

时间: 2024-12-29 23:30:41

DIY-自定义控件的相关文章

[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton篇 1/4]

我的文章一定要对读者负责-否则不是好文章  ----       www.ayjs.net  aaronyang技术分享 文章导航: 介绍vs2013 WPF开发,属性代码相关技巧 实战AyImageButton 1.0细用慢讲,学会用户控件,依赖属性,属性回调事件 诞生AyImageButton 1.1 支持 控件简单写法,支持自定义AyImageButton写法,提供详细的API 效果图: AyImageButton记录 源码下载:http://pan.baidu.com/s/1eQlHly

[Aaronyang] 写给自己的WPF4.5 笔记13[二维自定义控件技巧-可视化状态实战,自定义容器,注册类命令,用户控件补充]

 我的文章一定要做到对读者负责,否则就是失败的文章  ---------   www.ayjs.net    aaronyang技术分享 博文摘要:欢迎大家来支持我的<2013-2015 Aaronyang的又一总结,牧童遥指纳尼村>绝对好文章 关于<写给自己的WPF4.5 笔记14,已在官网发布> 1.讲解了自定义控件加入命令支持的两种手段,补充用户控件的客户定义模板 2.实战的方式讲解了无外观控件,可以让使用者定义模板,讲解模板PART,使用可视化状态组,动画的使用 效果演示:

winform 自定义控件的使用

c#的自定义控件还是很方便的,至少相对于c++而言. 1,当然是建立一个windows 窗体空间库,我这里就是用vs 2015 ,工程名MyControl 第二步.在自定义空间窗体内,拖放这样一组空间.我们发送编辑框的内容给父窗体,然后接受父窗体的发送的内容,显示到listbox 中. 这里会看到我使用了委托和事件,其实,刚入门的我,对于c#里的委托和事件 理解的并不深刻.看到很多地方再用.感觉和c++ 的回调很相似.这里就不纠结了, 后面慢慢理解吧.我们通过委托将子窗体的内容发送到主窗体. n

WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要有三种实现方式: 简单忙碌状态控件BusyBox: Win8/win10效果忙碌状态控件ProgressRing: 弹出异步等待框WaitingBox: 二.简单忙碌状态控件BusyBox 效果图: 通过属性"IsActive"控制控件是否启用,后台C#代码: /// <summary> /

自定义控件和使用的两种基本方法

有时需要一些组合起来的功能性强的控件,为了以后复用简单,还是自己自定义比较方便. 这里以一个自定义的导航栏为例子,在MainActivity里面使用这个控件. 方法一: 设计并编写自定义控件的布局文件,然后在其他布局文件中include. title的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android

自定义控件学习——防qq侧滑栏

效果 主要步骤: 1. 在xml布局里摆放内容. include    2. 在自定义ViewGroup里, 进行measure测量, layout布局    3. 响应用户的触摸事件    4. int scrollX = (int) (downX - moveX);    5. getScrollX()获取当前滚动到的位置    6. 平滑动画 先看布局 layout_left <?xml version="1.0" encoding="utf-8"?&g

手机卫士11_ 自定义控件_缓存清理_病毒库更新

拷贝安卓源码中的逻辑,可以考虑先创建一个小项目实现以下效果 1,病毒数据库的自动更新(连接网络,然后获取特征码保存到数据库?) ①工程师发现病毒apk,获取到它的特征码发布到服务器上 通过 MD5 或者ASH1获取特征码 ②客户端杀毒软件下载特征码(可能是 JSON串)到本地客户端 (在打开软件的时候还是打开查杀界面的时候?其实都不适合,应该开启一个服务去定期更新数据库,访问病毒更新特征码地址) 定期更新,timer和timertask,一般一个小时更新一次(测试的时候写短一点) 连接服务器:U

F - Free DIY Tour(动态规划)

这道题也可以用深搜做,可以深搜本来就不熟,好久没做早忘了,明天看看咋做的 Description Weiwei is a software engineer of ShiningSoft. He has just excellently fulfilled a software project with his fellow workers. His boss is so satisfied with their job that he decide to provide them a free

自定义控件一般步骤

自定义组合控件的过程 1.自定义一个View 一般来说,继承相对布局,或者线性布局  ViewGroup:   2.实现父类的构造方法.一般来说,需要在构造方法里初始化自定义的布局文件:    3.根据一些需要或者需求,定义一些API方法: ----------------------------------   4.根据需要,自定义控件的属性,可以参照TextView属性: 5.自定义命名空间,例如: 使用eclipse需添加如下命名空间     xmlns:自定义名称=http://sche

iOS 自定义控件

关于UIToolbar,UINavigationController,UINavigationBar,UIBarButtonItem在ios7的使用的简单的介绍,经过搜索资料做了如下的一些汇集 ----------------------------UIBarButtonItem---------------------------- 1:  UIBarButtonItem 隐藏的方式 [self.btnPunctuation setWidth:0]; 2:  UIBarButtonItem 获