C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)

本文介绍了如何在C#中为PropertyGrid显示中文属性名,以便非技术人员更容易理解。通过创建自定义的PropertyBase类和PropertyStub类,以及使用MyControlAttibute特性,实现了仅显示所需属性并用中文标注的功能。示例代码展示了如何为TextBox创建TextBoxProperty类,从而在PropertyGrid中以中文显示高度、宽度等属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【转    http://blog.youkuaiyun.com/ronotian/article/details/3183907

 

既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞定,让PropertyGrid显示Control的所有属性。可是这里显示的属性名是英文的。对于我们开发人员来说这无可厚非,我们也乐于接受。并且让PropertyGrid显示中文属性名,这对于我们开发人员的使用来说显得多此一举。可是,对于我这种类型的一个应用工具,英文属性名对于很多客户来说可能就很难懂了。所以应该让PrpertyGrid能够显示中文属性名。

如图:

 

 

另外,对于这样的一个系统。并不是控件的所有属性都是用户希望的,可能用户希望看到的仅仅是控件高度、控件宽度、控件文本。。等等的属性,但是如果直接将一个控件属性全部显示给用户的话,估计对用户造成的干扰和困惑是很大的。如何解决这个问题呢?其实用户控件开发的时候,如果我们不希望此属性在PropertyGrid中显示,我们可以设置这个控件的Attribute,如:

[Browsable(false)]

publicint Width

{

    get { }

    set { }

}

通过使用BrowsableAttribute就可以设置将此属性对PropertyGrid隐藏。

 

你可能要问到了,对于控件来说,其中的很多属性都是直接继承来的,我们并没有办法控制是否对PropertyGrid隐藏啊?呵呵,对啊,这就是我下面要说的解决方法(当然此方法显得不是很灵活,但是对于这种类型的系统的确相当有用)。

在我的解决方式中,我不直接这样PropertyGrid.SelectedObject = Control,而是把这个Control替换成一个专门为此类型的Control设计的类对象上。比如我对TextBox设计了一个TextBoxProperty,这样我们使用的是PropertyGrid.SelectedObject = TextBoxProperty的一个对象。

下面就是TextBoxProperty的代码:

  1. public class TextBoxProperty : PropertyBase
  2. {
  3.     private TextBox _Control;
  4.     public TextBoxProperty()
  5.     {
  6.     }
  7.     public TextBoxProperty(TextBox control)
  8.     {
  9.         this._Control = control;
  10.     }
  11.     [MyControlAttibute("文本", "获取或者设置控件文本", "")]
  12.     public string Text
  13.     {
  14.         get { return this._Control.Text; }
  15.         set
  16.         {
  17.             this._Control.Text = value;
  18.         }
  19.     }
  20.     [MyControlAttibute("宽度", "获取或者设置控件宽度", "")]
  21.     public int Width
  22.     {
  23.         get { return this._Control.Width; }
  24.         set
  25.         {
  26.             this._Control.Width = (int)value;
  27.         }
  28.     }
  29.     [MyControlAttibute("高度", "获取或者设置控件高度", "")]
  30.     public int Height
  31.     {
  32.         get { return this._Control.Height; }
  33.         set
  34.         {
  35.             this._Control.Height = (int)value;
  36.         }
  37.     }
  38.     [MyControlAttibute("上边距", "获取或者设置控件上边位置", "")]
  39.     public int Top
  40.     {
  41.         get { return this._Control.Top; }
  42.         set
  43.         {
  44.             this._Control.Top = value;
  45.         }
  46.     }
  47.     [MyControlAttibute("左边距", "获取或者设置控件左边位置", "")]
  48.     public int Left
  49.     {
  50.         get { return this._Control.Left; }
  51.         set
  52.         {
  53.             this._Control.Left = value;
  54.         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值