Visual studio 什么';这就是“玩”的状态;“视觉继承”;

Visual studio 什么';这就是“玩”的状态;“视觉继承”;,visual-studio,winforms,forms,visual-inheritance,Visual Studio,Winforms,Forms,Visual Inheritance,我们有一个应用程序,它必须灵活地向用户显示它的主要表单-根据用户的不同,表单应该略有不同,可能在这里或那里有一个额外的按钮,或者其他一些细微差别。为了停止编写代码来显式删除或添加控件等,我求助于可视化继承来解决这个问题——我认为这是一个很好的解决方案,干净且符合逻辑的OO风格——结果是,一半的继承表单都很难在VS中呈现它们自己,没有什么好的理由等等——我感觉开发人员和微软在某种程度上都回避了可视化继承的做法——你能证实这一点吗,我在这里遗漏了什么吗 问候。我经常在Visual Studio中偶然

我们有一个应用程序,它必须灵活地向用户显示它的主要表单-根据用户的不同,表单应该略有不同,可能在这里或那里有一个额外的按钮,或者其他一些细微差别。为了停止编写代码来显式删除或添加控件等,我求助于可视化继承来解决这个问题——我认为这是一个很好的解决方案,干净且符合逻辑的OO风格——结果是,一半的继承表单都很难在VS中呈现它们自己,没有什么好的理由等等——我感觉开发人员和微软在某种程度上都回避了可视化继承的做法——你能证实这一点吗,我在这里遗漏了什么吗


问候。

我经常在Visual Studio中偶然发现这样的问题。在许多情况下,MSVS表单设计器无法正确呈现表单。在我使用WinForms的那些日子里,我不得不做各种奇怪的把戏来启用一些复杂的场景。然而,我认为使用可视化继承是非常有益的,无论MSVS设计器有多大缺陷,都不应该抛弃它。

我正在研究(承认很快就会被淘汰)MCAD,WinForms元素的一部分是可视化继承

我个人对此没有什么大问题,但是,有一些考虑因素需要考虑

对我来说,主要问题总是初始化。。您需要记住,设计器不能/不以与运行时相同的方式实例化表单(类似地,它不能在web dev中这样做,这就是为什么需要注意自定义控件呈现的原因)

此外,一旦表单发生更改,需要对项目进行完整的重新构建,以便将对表单的更改传播到从表单继承的子表单

我个人没有看到任何证据表明它被“回避”AFAIK,在可能的情况下练习代码重用仍然是一个很好的实践。可视化继承提供了这一点。


我是否可以建议您使用示例代码创建一个新问题,其中包含您遇到的实际问题?然后我们可以看看它,看看我们是否能让它工作,并解释原因:)

我想他们在2005年或多或少地解决了桌面设计师的问题。 你试过惯犯了吗

  • 没有抽象控件类型
  • 没有任何形式的构造函数参数
  • 与Ctor相反,初始化被移动以形成_负载

  • 在同一项目中,没有控件与其所在的usercontrol/窗体相同
  • 关闭所有文档->清理->重建
  • 重新启动VS

我似乎认为,只要你做了以上所有的事情,它就会起作用。。。。。大多数情况下。

我在VS2005中看到了一些与此相关的问题。它们主要是由于设计器中窗体对象的构造问题造成的。试图从表单构造函数等访问数据库的代码出现问题

您可以通过启动visual studio的第二个实例并在调试器中加载第一个实例来调试此类问题。如果在代码中设置断点,则可以调试第一个实例中设计器中发生的事情

我记得的另一个问题是表单类中的泛型

public class MyForm<MyObject> : Form
公共类MyForm:Form

这行不通

我想我已经找到了避免这个问题的方法

不要在父窗体中挂接Form_Load事件,这将破坏设计器

另外,不要在父窗体中将默认的空构造函数从VisualStudio中移除。如果要进行依赖项注入,请创建另一个构造函数

像这样:

public ProductDetail()
{
    InitializeComponent();
}

public ProductDetail(ISupplierController supplierController) : base()
{
    InitializeComponent();
    this.supplierController = supplierController;
}
然后,您仍然可以从继承的表单执行此操作:

public NewProduct(ISupplierController supplierController)
    : base(supplierController)
{
    InitializeComponent();
}
到目前为止,这对我很有效,我也遇到了一些奇怪的设计师问题

干杯,丹尼尔读一下:

顺便说一句,视觉继承和依赖于设计元素集合的对象(通常是网格控件等)仍然存在问题。我相信MS仍然排除了更改f.ex的可能性。继承表单/usercontrol等中的GridView,但其他控件(如TextBox、表单、usercontrol、Panel等)应按预期工作


到目前为止,我本人对使用第三方网格控件的VI没有任何问题,但您必须小心,尤其是必须避免从集合中删除项。

Edit:InitializeComponent();也必须从新的构造函数中调用,以使其工作。“在同一项目中没有控件作为usercontrol/表单放入”-真的吗?我一直都这么做。从来没有任何问题……在VS2003中是个大问题。当时,设计师有点垃圾