C#中怎么添加这样的控件? 想做一个类似的控件,如下图所示,不知道怎么弄,请大家指教~

2024-11-27 16:45:59
推荐回答(4个)
回答(1):

开发自定义控件中,有专门的编辑器,这个编辑器就是所谓的省略号后的窗体。
需要用到System.Drawing.Design.UITypeEditor基类,自己新建一个类,继承这个基类,然后重写方法,如:UITypeEditorEditStyle、EditValue
并不是你想的那么简单,其中数据类型的判断,转换等,还需要自己创建一个类并继承TypeConverter基类,在类中重写需要的方法。在你说的省略号窗体类开头需要引入这个类型转换类。
为此,你还要创建一个类,专门用来存放属性窗体中设置的属性,并也需要引入TypeConverter
这种事情不是一句话就能说明白的,想开发自定义控件,还需多学习一下。
我工作上的需要也开发过,但这类的开发任务不多,所以很多也都忘记了。
1、创建一个窗体,也就是你单击省略号后弹出的属性窗体(需引入TypeConverter)
2、创建一个类型类,这个类主要是针对你直接在属性文本框中输入的内容的转换操作,继承TypeConverter基类。如:文本框中直接输入“宋体,9PT”,这个类就需要对你输入的内容进行格式化转换并将转换后的信息赋值给对应的属性。
3、创建一个类,这个类中有关于你窗体中参数对应的属性get;set;(需引入TypeConverter)
4、需要创建一个专门处理属性的类,继承UITypeEditor基类,这个类主要负责怎样出处理,省略号窗体类中的属性,需要在控件属性中引入,如:
[DefaultValue(""), Description("参数"), Category(""), Editor(typeof(ParamsEditor), typeof(System.Drawing.Design.UITypeEditor))]
public IParams Params
{
get { return iParams; }
set { iParams = value; }
}
这里的Params就相当于,你图中所示的Font属性,引入Editor编辑器后,就会出现省略号,表示可以打开内置的属性编辑器,这个编辑器就是上面说的了。
补充一下:自定义控件类,需要引入[Serializable]标记为可序列化,因为需要本地存储设置好的属性哈。
去MSDN查阅资料!
(来来回回修改了几次啦,如果对你有用,就打点赏吧!)

回答(2):

你截图里面哪是控件,是一个属性吧。
你的控件要实现什么样的功能?设置字体大小和颜色的?我有C#组件编程方面的资料,留个联系方式给你发过去。

回答(3):

propertygrid
c#里面有这个控件。
你添加一个这个控件,
然后单击事件中写
propertygrid.selectedobject=this;

回答(4):

楼主您好.帮你写了个简单的例子.

后台代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication3

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

        }

        private void textBox1_Enter(object sender, EventArgs e)

        {

            button1.Visible = true;

        }

        private void textBox1_Validated(object sender, EventArgs e)

        {

            if (!button1.Focused)

                button1.Visible = false;

        }

        private void button1_Validated(object sender, EventArgs e)

        {

            if (!textBox1.Focused)

                button1.Visible = false;

        }

        private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show("abc");

        }

    }

}