我可以编写一个 .NETCF 部分类来扩展 System.Windows.Forms.UserControl 吗?
Posted
技术标签:
【中文标题】我可以编写一个 .NETCF 部分类来扩展 System.Windows.Forms.UserControl 吗?【英文标题】:Can I write a .NETCF Partial Class to extend System.Windows.Forms.UserControl? 【发布时间】:2011-02-25 05:45:22 【问题描述】:好的...我正在编写一个 .NET CF (VBNET 2008 3.5 SP1) 应用程序,它有一个主窗体,它基于菜单点击动态加载特定的用户控件,这是一种框架思想。
这些控件都需要在应用程序中工作的某些方法和属性。 现在我正在将其作为一个接口来执行,但随着所有人都起床,这会变得更糟,因为有些方法是可选的,但我必须通过接口的性质来实现它们。
我更喜欢使用继承,这样我就可以通过可覆盖性来继承某些代码,但是如果我编写一个继承 System.Windows.Forms.UserControl
的类,然后从中继承我的控制权,它会显示曲线,并告诉我 UserControls 必须直接从System.Windows.Forms.UserControl
继承。 (谈论一个设计缺陷!)
所以接下来我想,好吧,让我使用部分类来扩展System.Windows.Forms.UserControl
,但是当我这样做时,即使一切似乎都编译得很好,我的控件上也没有出现我的新属性/方法。
有什么方法可以使用部分类来“扩展”System.Windows.Forms.UserControl
?
例如,谁能给我一个部分类的代码示例,它只是将MyCount As Integer
只读属性添加到System.Windows.Forms.UserControl
类?如果我能看到如何做到这一点,我可以从那里得到它并添加我的其余功能。
提前致谢!我一直在搜索谷歌,但找不到任何似乎适用于 .NET CF 上的 UserControl 扩展的东西。接口方法让我发疯,因为即使是很小的变化也意味着更新所有控件,无论它们是否需要“覆盖”该方法。
编辑:如果可能的话,我真的在寻找一种方法来进行简单的代码继承,而无需视觉继承。我的控件没有共同的视觉元素,我真的只需要在代码隐藏中继承共同的功能。
【问题讨论】:
【参考方案1】:好的,我必须做的是“显示所有项目文件”。然后显示一堆隐藏文件。对于每个窗体/控件,其中一个隐藏文件是 myform.designer.vb
文件。您需要更改designer.vb
文件中的Inherits
行。
然后它完美地工作了。
【讨论】:
【参考方案2】:我刚刚在 SmartDevice 项目中测试了 UserControl 继承,它工作正常。 我使用了一个从 UC 模板创建的 BaseUserControl,而不仅仅是一个类。
【讨论】:
好吧,我将更多地用于“代码隐藏”继承,......通用功能,而不是视觉继承,因为组成模块的各种控件没有任何共享视觉确实有相似之处。但是例如,它们都必须具有 Init、Save、Clear 方法、Count 属性、some 覆盖 Done 方法等。与控件的 UI 完全无关。我想如果我需要的话,我可以走这条路,但它看起来非常笨拙。 @eidylon: 只是不要添加任何控件...这只是为了满足设计者(可能想要在正确的位置和形式的 .resx 和 .Designer.cs)。 我正在奖励积分,因为我认为这基本上与我最终让它工作的方式相同。我做了“显示所有项目文件”,然后在 MyControl.Designer.vb 文件中编辑了 Inherits 行,然后它工作正常。我很好奇 Henk,如果您查看继承控件的 Designer.cs 文件,它是否实际上将其中的继承基类更改为您的基类? 我不确定 vb 但在 C# 中只有部分类的一部分可以指定基类。那是在非设计师文件中。 看,那是我最初尝试在非设计器文件中指定基类的地方...... ctl.vb(与 ctl.designer.vb 相对),那是它大喊大叫的时候对我说“必须继承 System.Windows.Forms.UserControl'。猜猜这一定是 C# 和 VB 编译器之间的差异。嗯……感谢 Henk 的帮助;干杯!跨度>以上是关于我可以编写一个 .NETCF 部分类来扩展 System.Windows.Forms.UserControl 吗?的主要内容,如果未能解决你的问题,请参考以下文章
部分类静态类Object类ToString()方法扩展方法的使用
如何在 EntityFramework Core 中使用部分类和部分 OnModelCreating 方法扩展 DbContext