博客转移到 http://jacean.github.io/ 继续分享编程经验

因为要做流体布局,但两个控件没办法组合,就做自定义控件。这个控件需要一个text设置文本,一个pic设置图片显示,图片通过选择获取,在属性面板里能够修改。

添加用户控件之后就可以自己随意设置控件内容了,这里说下关于属性的一些设置。

  1. 自定义控件显示在工具箱的开关:
    将true改为false就可以不显示了。

    [ToolboxItem(true)]
    public partial class UserControl1 : UserControl
  2. 自定义控件在工具箱中的图标显示:
    可以使用已有控件的图标,
     [ToolboxBitmap(typeof(System.Windows.Forms.PictureBox))]
    public partial class UserControl1 : UserControl

    如果不想用系统的图标,要使用自己的图标,可以这样(这部分未测试,源于参考文章)

     [ToolboxBitmap(typeof(MyPanel), "WindowsApplication1.Images.MyPanel.bmp")]
    public class MyPanel : UserControl

    不过,一定要注意路径,WindowsApplication1.Images.MyPanel.bmp表示,解决方案是WindowsApplication1,目录是Images,文件名是MyPanel.bmp,同时,这个图片必须是“嵌入的资源”(点击文件,右键,属性,有一个文件属性,其中,在生成操作中,可以选择"嵌入的资源")

  3. 自定义控件在属性面板上的显示开关:
     [Browsable(true)]
    [Description("属性描述"), Category("属性类别"), DefaultValue("属性默认值,重置时使用")]
    public override string Text
    {
    get { return label1.Text; }
    set { label1.Text = value; }
    }

    category设定的是属性在属性面板上显示的类别,当使用了类别时,组件属性和事件可以按逻辑分组显示在属性浏览器中。Category("Appearance")就可以把属性从杂项转移到外观。
    (摘抄自参考文章)用于设置默认的值,对于string,bool,int,可以直接写出来,如[DefaultValue(10)],这是可以的,不过,不是这三种类型的话,就比较麻烦,一定要先转化为string才能设置成功。如上面的DarkGray,这是系统定义的颜色,这还是比较好处理的。不过,如果是一些自定义的颜色,如颜色是128,0,128,你应该将128转为16进制,写成0x800080,前缀0x是一定要加的。最后就这样[DefaultValue(typeof(Color), "0x800080")]
    还有一种[DefaultValue(typeof(Color), "0, 70, 213")]
    如果是字体的话需要[DefaultValue(typeof(Font), "宋体, 9pt")]
    这两种特殊情况三种方法本人均未测试。

  4. 自定义控件属性选择资源:
    如果自定义的属性不是文本等输入,是图片之类的就需要类似于picturebox的资源选择了,所以在设置属性的时候使用文件类型来定义,如选择图片的例下
     [Browsable(true)]
    [Description("设置控件图片"), Category("setPic"), DefaultValue(" ")]
    public Bitmap setPic
    {
    get { return (Bitmap)this.pictureBox1.Image; }
    set
    {
    this.pictureBox1.Image = value;
    }
    }

    这样的话就会在属性面板的设置中出现选择资源的对话框来选择。

  5. 自定义控件属性选择下拉列表:

    在定义属性的时候需要先设置好枚举值,通过枚举来定义属性,如例下

     1 public enum indexEnum
    2 {
    3 a,
    4 b,
    5 c
    6 }
    7 public indexEnum index;
    8 [Browsable(true)]
    9 [Description("设置index"), Category("Index"), DefaultValue("属性默认值")]
    10 public indexEnum Index
    11 {
    12 get { return index; }
    13 set { index = value; }
    14 }

附:

参考文章:常用Design属性 【C#】妈妈再也不用担心自定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚

c#自定义控件属性面板及选择资源设置的更多相关文章

  1. c# 用户控件,usercontrol,自定义控件属性

    1.C#用户控件的使用 2.拖动添加:画面上如需多个usercontrol,添加TableLayoutPanel,然后在工具箱中找到usercontrol,拖到相应框中 3.代码添加:主窗口中有多个T ...

  2. winform 自定义控件属性在属性面板中显示

    Jan.David Nothing is impossible, the word itself says 'I'm possible'!" — Audrey Hepburn winform ...

  3. Xcode 属性面板添加自定义控件属性

    让自定义控件像原生控件一样可以在属性面板配置参数,Apple文档传送 直接上效果图,根据

  4. Inspector a ProgressBar(定制属性面板)

    一.定制进度条 这篇文章主要学习如何在Unity的Inspector中使用ProgressBar 普通属性面板预览 通常我们的属性面板如下 定制属性面板预览 而通过扩展成ProcessBar后 二.内 ...

  5. XCode属性面板使用说明

    Xcode 中Interface Builder 工具 是一个功能强大的“所见即所得”开发工具.本文主要介绍属性面板 和  对象库面板 对象库面板: 提供了所有Cocoa Touch 库给我们定义好的 ...

  6. Qt编写自定义控件属性设计器

    以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需 ...

  7. 开启Unity项目中VS工程的属性面板

    https://www.cnblogs.com/CodeGize/p/7859656.html Unity生成的VS工程一般是无法打开属性面板的.但是事实上,如果使用VS for unity,通过配置 ...

  8. SharePoint 2013 WebPart属性面板配置

    为WebPart添加右侧的属性面板,方便将来对于WebPart的配置,我们只需要在CustomWebPart.cs文件里面,声明一下变量即可: private string url = string. ...

  9. 根据选中不同的图元来显示不同的属性面板changePropertyPane.html

    在现实生活中,我们有很多时候需要根据选中不同的东西来获取不同的属性,并且就算是同类型的东西我们有时也希望显示不同的属性,就像每个人都有不同的个性,可能会有相同点,但是不可能完全相同. 根据这个思想,我 ...

随机推荐

  1. Linux 下绑定域名与IP地址

    在 Linux 下,hosts 文件的路径是 /etc/hosts,此文件需要有root权限才可编辑,条目也是通过“IP 域名”的格式将域名与IP进行绑定. 对 Linux 的 hosts 配置文件的 ...

  2. 反人类的MyEclipse之-eclipse设置花括号换行显示

    http://www.cnblogs.com/zhwl/archive/2012/12/17/2821806.html 习惯了C的代码风格,用Eclipse的风格,实在是看得卵子痛.尤其是大括号放在最 ...

  3. (easy)LeetCode 226.Invert Binary Tree

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...

  4. VS2013配置WTL90_4140_Final

    网上关于WTL的文章,尤其是中文的文章不多,根据收集的资料整理出了VS2013安装WTL的方法. 1.下载.文件很小的,地址:http://sourceforge.net/projects/wtl/f ...

  5. [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库

    转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...

  6. 02-自定义CALayer

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. OC基础(24)

    NSMutableArray基本概念 NSDictionary基本概念 NSMutableDictionary基本概念 常见的结构体 *:first-child { margin-top: 0 !im ...

  8. Cocos2d-x 3.0 事件系统【转】

    事件系统,是一个软件的核心组成部分.从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块.在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户 ...

  9. (转)直接拿来用!最火的iOS开源项目(二)

    “每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7, ...

  10. C# 版dll 程序集合并工具

    C# 版dll 程序集合并工具 最近要开发一个控件给同事用,开发中会引用一些第三方DLL,这样交给用户很不方便,希望的效果是直接交付一个DLL文件.网上找了一些资料. 1.       使用 Cost ...