用C#做一个WinForm程序,其中用到了DevExpress的控件,出现了一下问题:设计时并没有提示什么错误或警告,程序运行时设计界面显示为一片空白,终止程序运行,界面变成了一个错误警告:设计器加载程序未提供根组件,但没有指出原因。虽然关闭设计界面然后重新打开,界面显示能重新正常显示,而且整个过程中不影响程序的运行,但是不断的提示这种错误,需要不断的关闭、重新打开设计界面,实在令人不爽,而且,有了问题不去解决,我认为不是一个好的程序员应有的作风,所以即使这个错误不影响运行,我也决定解决它。
通过查资料和向资格老的同事请教,将原因归结为两个可能:1、VS2010的Bug 2、DevExpress的Bug。虽然网上列出了很多说法,但是都加了可能、好像这样的字眼,即没有确定问题的根源。我认为应该是第二种可能,即是DevExpress的问题,通过网上查资料,我找了一个与我情况十分类似的,其将问题归咎于DevExpress套件中BarManager组件的释放顺序。在我的设计界面中,有的BarManager的父窗体并不是设计界面的根窗体,即并不是设计界面最大最外层的窗体,而是位于根窗体上的类似于PanelControl 或者SplitContainerControl这样的窗体(这里将父窗体设置为这些Control是程序上的需要),所以在释放这些父窗体的时候,若还有Menu引用着该BarManager,可能就会导致界面的Dispose出现问题,从而导致了程序终止运行后设计界面报错。为了试着解决问题,我将BarManager替换为WinForm的ToolStrip控件,然后重新试运行,问题没再出现。不过,很遗憾,虽然问题解决了,但是并没有真正的找到问题出现的根本原因,以及对应的解决问题的最好办法。关于BarManager,其实还有一个小问题:通过设计界面添加一个Item后,再通过设计界面删除,但是查看设计器代码会发现添加Item时自动生产的一些代码并没有删除,有些会有隐患,比如不能再添加相同名称的Item,有些没有什么隐患,但是对于程序员来说,多余的代码总是不应该存在的,所以还需要自己去手动查看哪些是需要删除的代码,这点也应该属于BarManager一个很大的缺点。
小结:DevExpress的控件确实比WinForm的要更加美观一些,用起来方便一些,但是DevExpress的控件的bug确实也比WinForm的多,例如这一个小Bug就让我对DevExpress感觉很不爽,同样的,我们也是做程序的,如果我们做的程序出现让用户很不爽的Bug,用户的感觉应该和我现在的感觉应该是一样的,所以作为一个程序员,应当尽可能的减少自己程序中的bug。做到程序中一点问题也没有,恐怕没有一个程序员敢这么担保吧,但是应当竭尽全力的防止bug的出现,这需要强大的技术能力作保证,同时也需要一个严格自我要求的态度。