我想改变TextBox的外观,用复合控件的做法很容易做,加个自定义的外框,加个按钮什么的,但麻烦的是没法使用TextBox的属性、事件、方法了,除非把复合控件的TextBox作为公有成员曝露出来,或在新控件中重写它们(太可怕了),但MSDN中又好像不赞成这样的做法。如果采用直接从TextBox继承,上述问题是没了,可又因为新控件的窗口就是TextBox本身,要如何改变它的外观呢,所有的绘制操作全被限制在TextBox的Size里了,想加个外框,加个按钮都很难了。这要如何是好呢?真不知道DevExpress库是怎么做的。诸位帮帮忙了,出出主意,好吗?谢谢了。

解决方案 »

  1.   

    你充分扩展继承的TextBox就行了
    你要修改外观的话在onpaint方法中实现
    加按钮用textbox.Controls.Add....
      

  2.   

    ;;;你充分扩展继承的TextBox就行了
    ;;;你要修改外观的话在onpaint方法中实现
    ;;;加按钮用textbox.Controls.Add....可是按钮不管放在什么位置都会覆盖掉部分TextBox啊,那样TextBox中的文本就有一部分会看不到或无法控制。
      

  3.   

    稍微看了一下DevExpress库的帮助,就以文档上的类的继承图来说,它不像是直接从TextBox继承的,它要不是采用复合控件就是从头写了个编辑控件,它的类继承如下:
    Control->XtralControl->EditBase->TextEdit...,而且从VS.NET对类中的某些方法的智能提示来看,也验证了这一点,比如SelectAll方法,就只有TextEdit和EditBase两个版本,看不到TextBox影子。这要是用Win API来做,问题就简单多了,马上就有切入点,这用了.NET反而不知道要如何了,哎...