【转 http://blog.csdn.net/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的代码:
- public class TextBoxProperty : PropertyBase
- {
- private TextBox _Control;
- public TextBoxProperty()
- {
- }
- public TextBoxProperty(TextBox control)
- {
- this._Control = control;
- }
- [MyControlAttibute("文本", "获取或者设置控件文本", "")]
- public string Text
- {
- get { return this._Control.Text; }
- set
- {
- this._Control.Text = value;
- }
- }
- [MyControlAttibute("宽度", "获取或者设置控件宽度", "")]
- public int Width
- {
- get { return this._Control.Width; }
- set
- {
- this._Control.Width = (int)value;
- }
- }
- [MyControlAttibute("高度", "获取或者设置控件高度", "")]
- public int Height
- {
- get { return this._Control.Height; } <