我有以下问题:我有一个基本窗体停靠在面板底部和面板内的一些按钮。继承此基本表单的表单可以通过属性显示在子表单属性中的“ButtonCloseVisiblity”属性来修改基本表单按钮的可见性。问题是,有时当子窗体刷新时(例如,当我双击一个事件,删除代码中新创建的事件并返回给设计者)时,按钮的可见性再次设置为它们的默认状态。在C#中的窗体继承#
回答
挖一个答案我来这一点,当我有获得/从控制直接设置属性如基本形式和使用性能:
public bool ControlVisibility
{
get{ return control.Visibility; }
set{ control.Visibility = value; }
}
当子窗体修改,这种修改没有被持久化为代码,并且可见性是由基本表单定义的,因此每次打开子表单或重建项目时,继承控件的可见性默认为基本表单值。为了解决这个问题,我们必须添加一个字段,并在属性更改其值:
private bool _controlVisibility;
public bool ControlVisibility
{
get{ return _controlVisibility; }
set
{
_controlVisibility = value;
control.Visibility = value;
}
}
这样的属性在代码仍然存在。
我已经使用了继承形式,但没有使用它们的控件。
对不起,如果你已经试过这个。
尝试将调试消息放置在基类的各种事件中。可能会有一次触发,您可以在设计模式下重新应用您的设置。
这很可能归属于基本属性上缺少的属性。看看this MSDN page,特别是DesignerSerializationVisibilityAttribute
。
是的,它在Visual Studio中非常频繁地发生。将您的更改保存在子窗体构造函数中,或者在OnLoad()中执行。如果您不希望在设计模式下以子窗体显示更改,则还可以添加以下检查。
if(!DesignMode){
....
}
不知道我是否完全理解,但它似乎医治,如果可见性属性被覆盖值?如果您在设计器文件中手动更改该值,则在下次刷新设计器文件时(例如,添加新控件时),该值将被覆盖。
尝试从属性选项卡设置值,而不是在设计器文件中手动写入。
我更改了属性选项卡中的属性,但它始终被覆盖 – Argons 2010-01-14 13:59:28
对于VS中的WinForms/controls上的可视化元素的继承并不是那么好或不可靠 - 正如我发现我的成本!消失或重新排列的控制或覆盖的属性恐怕是规范。
当我研究这个问题时,MS的回应似乎是,它太难以正确实施,并且他们没有计划解决它!我认为它很多依赖于子控件中的代码生成而不是真正的继承。
顺便说一下,DesignMode可以直接在窗体上进行控件,但如果您有窗体控件或任何更深层次的控件,则不可靠。去年我在某个时候在这里发表了一篇关于此事的文章或答案。
- 1. 在C#中继承窗体#
- 2. 继承自C#中的窗体#
- 3. 继承C#中的Windows窗体控件
- 4. 在Windows窗体中的字体继承
- 5. Extjs窗体继承
- 6. C#VS2012继承的窗体菜单
- 7. 在托管C++中是继承的窗体和/或继承的控件可能
- 8. 如何在Windows窗体中继承Wpf中的窗体形式
- 9. C#根窗体继承,更改导致破碎的子窗体
- 10. 在C中的接口继承Windows窗体#
- 11. Django窗体继承问题
- 12. 窗体继承问题
- 13. Windows窗体通用继承
- 14. 窗体组件继承CommonDialog
- 15. Django 1.9窗体继承UpdateView
- 16. 在C#.NET中继承外部窗口
- 17. C#窗体继承 - 父窗体中的函数需要在子窗体中调用overrided函数
- 18. 从主窗体继承图标到vb.net中的子窗体
- 19. 如何继承Visual Studio中的窗体之间的变量,C++
- 20. 如何从Visual Studio C++中的QT窗体继承
- 21. 使现有的Windows窗体可继承
- 22. 在C++中的继承
- 23. 在C++中的继承
- 24. 在继承C++
- 25. 继承在C#
- 26. C#.NET - 如何从现有的Windows窗体控件继承
- 27. C#做一些类似Windows窗体的动态继承?
- 28. ui.router嵌套视图继承父窗体
- 29. Django窗体继承 - 更改字段
- 30. .NET UserControl继承父窗体背景
你的英语很好。 – DOK 2010-01-14 13:07:17