我创建了一个简单的类
Class UserControlBase
Inherits UserControl
End Class
然后我将每个 UserControls 设计器文件中的 Inherits 子句更改为
Inherits UserControlBase
我知道通常你不应该手动修改设计器文件。但在这种情况下,你还能做什么?这个可以吗?有没有我不知道的最佳实践?是否有其他方法可以实现相同的目的(扩展 UserControl)?
我创建了一个简单的类
Class UserControlBase
Inherits UserControl
End Class
然后我将每个 UserControls 设计器文件中的 Inherits 子句更改为
Inherits UserControlBase
我知道通常你不应该手动修改设计器文件。但在这种情况下,你还能做什么?这个可以吗?有没有我不知道的最佳实践?是否有其他方法可以实现相同的目的(扩展 UserControl)?
我没有遇到更改 Inherits 行、添加 Namespacing 或添加 Imports/Using 语句的问题。如果您需要执行这 3 个中的任何一个,您将找不到许多其他方法来处理这些要求。
我在我的 C# 项目中一直在更改它们……通常,这是最简单的方法,可以将您曾经在设计器中完成的某些内容复制到类似的表单中,并且您希望以不同的形式执行相同的操作。Visual Studio 完全能够读取您的更改并将其合并到设计器中。我真的不知道为什么会有评论说不要编辑它。我的建议是确保你使用源代码控制,继续编辑它,测试它,如果它有效,那就太好了,如果没有,你可以随时退出你的编辑。
不,修改生成的文件绝不是一个好主意。
Designer 文件是非常简单的代码;您通常会在其中发现使事情复杂化的唯一事情(但只是轻微的)是文件顶部和底部的 BeginInit/EndInit 调用——在这两者之间,代码非常宽容。
*也就是说,不要在其中放置任何只会在运行时执行的代码。任何依赖于运行时的代码都会在设计时失败,因此尝试在设计视图中打开您的控件将导致崩溃。它曾经给你带来了该死的红屏,但我不确定 IDE 现在有什么影响——但如果事情发生了变化并且通常的技巧无法解决它们,那么请尝试删除你的自定义部分。
进一步说明(不是吓唬你,而是希望避免我们遇到的一些困难)如果你的代码不是当前构建的解决方案的一部分,那么确定你的代码是在运行时还是设计时执行的方法通常会失败/项目。
因此,将其全部带回家,简单的 UI 布局/winforms 修改完全可以在设计器代码中手动完成。应谨慎处理数据绑定和外部依赖项(调用第三方控件库除外)。