c# – 继承表单上的控件被锁定,是否可以撤消?

建立:

我创建了一个我希望作为基础的表单,我将继承其他表单.这个基本形式充当各种“模板”,但它也提供了与结构相关的大量功能,以及所提供的所有控件的相互关系.

下面的图像的底漆…顶部信息色条是从ToolStrip继承的自定义控件.底部条带是另一个自定义,再次继承自ToolStrip.左边的白色块是一个TreeView,右边的块是一个TabControl(从中删除了所有的TabPages ……我打算在继承的表单中添加它们).

设计师中基本形式的图像:

设计师中继承形式的图像:

显然,唯一的区别是,当我打开继承的表单时,我会在每个控件上叠加一个小盒子图标,当我点击它们时,我会看到挂锁告诉我无法编辑.

问题:

继承表单上的所有控件都被锁定.我已经研究了visual inheritance的问题,据我所知,我没有使用任何明确不支持它的控件,正如this link所暗示的那样.在this Q&A,汉斯建议改变那些控件上的修改器,我已经完成了.事实上,我尝试了Public和Protected,都没有取得好成绩.

我很难过.

这是设计器中的技术限制,它特定于您正在使用的SplitContainer控件.还有一些其他的.麻烦制造者是ISupportInitialize接口.

当控件无法以任意顺序分配控件的属性时,控件将使用此接口.设计人员在看到控件实现此接口时会有帮助,它在开始分配属性时调用BeginInit()方法,EndInit()在完成时调用.控件使用这些方法来延迟属性赋值的副作用,EndInit()方法使它们有效.对于SplitContainer很重要,面板的最小尺寸也会影响分割器的位置.

也许你可以看到rub,基础表单类中的InitializeComponent()方法已经调用了ISupportInitialize.EndInit().因此,在派生的表单类中再次修改属性不太可能.设计者通过锁定来保护控件.

非常不方便,没有简单的解决方法.如果在派生的表单类中修改SplitContainer是一项硬性要求,那么您将不得不放弃继承它或在派生类构造函数中手动编写代码.

https://stackoverflow.com/questions/22181926/controls-on-inherited-form-are-locked-can-it-be-undone

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 继承表单上的控件被锁定,是否可以撤消?