热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

求助:如何定义让PropertyGrid控件显示[...]按钮,并且点击后弹出自定义窗口(或执行自定义过程)的属性?(用C#语言实现)

各位专家,您好:最近遇到了一点问题,好几天都没有解决.请各位专家给些建设性的指导意见.谢谢.比如.我们在FORM1.CS[DESIGN]上拖放一个PROPERTYGRID控件,
各位专家,您好:
    最近遇到了一点问题,好几天都没有解决.请各位专家给些建设性的指导意见.谢谢.
    比如.我们在FORM1.CS[DESIGN]上拖放一个PROPERTYGRID控件,而这个控件有FONT的这样的一个属性,点击FONT后面[...],我们看到一个弹出的界面,上面有"字体","字形","大小"等等.
    我现在想做的就是,通过点[...]出现一个自己定义的界面(当然不是在FONT属性后),这个界面上有TEXTBOX,COMBOBOX等控件,然后得到TEXTBOX,COMBOBOX所输入的值.插入数据库当中.
    如果有什么说的不清楚的地方,请提醒.谢谢.
    十分感谢各位专家,技术上的带头大哥.谢谢.
    QQ:147370451. MSN:LIXIN19821010@HOTMAIL.COM.

9 个解决方案

#1


不知道有没有什么文档比较适合(C#语言),请大家推荐一下.谢谢

#2


首先定义自己要弹出的窗体,比如myform:

public partial class myform: Form
{
    ....//your code here
}


从UITypeEditor继承一个自定义属性编辑管理器类,参考如下:

internal class myeditor : UITypeEditor
{
public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc != null)
{
myform f = new myform();
// your setting here
edSvc.ShowDialog(f);
}
return value;
}
public override bool GetPaintValueSupported(System.ComponentModel.ITypeDescriptorContext context)
{
return false;
}
}


在类的成员属性上指定所需的属性,如:

[EditorAttribute(typeof(myeditor), typeof(System.Drawing.Design.UITypeEditor))]
public youType youProperty
{
    get{...}
    set{...}
}


在窗体上放好PropertyGrid,然后把你的类实例化后让PropertyGrid来显示设置就可以看到自定义的窗体了。

#3


    十分感谢hbxtlhx的回答.
    另外还有一个比较傻的问题.  
    在点[...]弹出的页面中,其中分左右两边, 比如左边是:ITEM1,ITEM2,右边是ITEM1,ITEM2的TEXT,VALUE等属性.这是如何实现的.
    我总是只能得到左边变量的值.
    在加入[EditorAttribute(typeof(ListItemsCollectionEditor), typeof(UITypeEditor))]这句话.以下是我写的.
        private ListItemsCollectionEditor _Items;
        [EditorAttribute(typeof(ListItemsCollectionEditor), typeof(UITypeEditor))]
        public ListItemsCollectionEditor Items
        {
            get
            {
                return this._Items;
            }
            set
            {
                this._Items = value;
            }
        }
    虽然知道是错了,但是由于对这东西不熟悉,很多东西不懂,不知道错在哪里,请教,谢谢

#4


刚刚自己乱做了一个,勉强能实现功能,贴上来,给大家群起而乐之. :)
class ArrayValueShow
    {
        private static ArrayValue y1 = new ArrayValue();
        private static ArrayValue y2 = new ArrayValue();
        private ArrayValue[] _Members = new ArrayValue[] { y1, y2 };
        public ArrayValue[] Members
        {
            get 
            {
                return _Members;
            }
            set 
            {
                _Members = value; 
            }
        }
    }

class ArrayValue
    {
        public bool _ID;
        public string _Name;
        public string _Height;
        public bool _Age;

        public ArrayValue()
        {
            this._ID = false;
            this._Name = "1010";
            this._Height = "1010";
            this._Age = false;
        }

        [DefaultValueAttribute(false)]
        public bool ID
        {
            get { return this._ID; }
            set { this._ID = value; }
        }
        public string Name
        {
            get { return this._Name; }
            set { this._Name = value; }
        }
        public string Height
        {
            get { return this._Height; }
            set { this._Height = value; }
        }
        [DefaultValueAttribute(0)]
        public bool Age
        {
            get { return this._Age; }
            set { this._Age = value; }
        }
    }
    在前面实例化一下ArrayValueShow这个类,把他赋值给PROPERTYGRID的SELECTEDOBJECT.便可实现.
    希望小弟在此能够达到抛砖引玉的效果.
    谢谢大家关注.

#5


十分感谢hbxtlhx的回答.
今天早上一来就试了一下您的代码,结果是:十分HAPPY.
但是还有一个小小的问题:
[EditorAttribute(typeof(myeditor), typeof(System.Drawing.Design.UITypeEditor))]
public youType youProperty
{
    get{...}
    set{...}
}

在这里,我用一个INT类型,没有任何问题.编译器完全被玩弄与孤掌中.演示的结果完全在预料之中.
可是又试了一下STRING[]类型,好象就不行了.具体代码如下:
private string[] _Name1 = new string[10] {"'C2=','乙烯',0,0", "'C3=','丙烯',0,0", "'BUT','丁二烯',0,0", 
            "'CBU','聚丁二烯',0,0","'C41','丁烯—1',0,0", "'C42','丁烯—2',0,0", "'IC4','异丁烯',0,0", 
            "'CIC','粗异丁烯',0,0", "'STR','苯乙烯',0,0", "'SBT','苯乙烯B-T',0,0" };
        [CategoryAttribute("产品类型集合"), DisplayName("'CET','二、化工原料类小计'"), ReadOnlyAttribute(false)]
        [EditorAttribute(typeof(myeditor), typeof(System.Drawing.Design.UITypeEditor))]
        public string[] Name1
        {
            get
            {
                return _Name1;
            }
            set { this._Name1 = value; }
        }
    具体所指:点[...]可以弹出对话框.但是我需要的是在每个STRING后面显示[...],对每个STRING进行修改,插入操作.
现在我也在TROUBLE SHOOTING.如果您或者各位专家有空,闲暇时间,是否也可以帮帮小弟.
    十分感谢各位的关注

#6


    VS2005的PROPERTYGRID控件是不是不支持对数组型的数据进行单一修改(即对数组的某一个元素出现[...]修改属性)?

#7


弹出自定义对话框后的操作及逻辑取决于楼主的业务逻辑,可帮性不大了。

#8


其实业务逻辑并不复杂,但是设计了好几个方案.感觉比较满意的:
一是HBXTLHX您提到的,但是自己整了很长时间,想对数组中的数据进行一一弹出界面,然后修改,没有什么进展.
二是我上面贴子的代码,能够符合要求,但是问题在于界面就没自定义的友好,对于用户来说则需要进行使用培训.
不管如何, 十分感谢HBXTLHX您的帮助.

#9


:)

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
author-avatar
烦了_12664
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有