【问题标题】:can't add user control from another solution, despite it being public无法从另一个解决方案添加用户控制,尽管它是公开的
【发布时间】:2016-09-04 22:35:45
【问题描述】:

以下是可重现的。

我有两个解决方案。

一个有一个用户控件。该解决方案称为 testusercontrolproj

另一种解决方案称为 ProjectA

我正在尝试让 ProjectA 使用来自其他解决方案的用户控件 testusercontrolproj

所以我使用用户控件创建了解决方案 - testusercontrolproj 它出现在工具箱中,很好。

然后我创建解决方案 ProjectA,即使用用户控件。我右键单击解决方案并选择添加现有项目,并将其指向 testusercontrolproj,然后将其导入。我添加了对它的引用。我为它添加了一个 using 语句。我重建解决方案并重建项目A。并重新启动视觉工作室,尽管如此 -

我注意到,如果在 ProjectA 解决方案中,我转到 testusercontrolproj 项目,然后我双击那里的表单,然后单击工具箱,我看到了控件。

但是,如果在 ProjectA 中,我双击 ProjectA 中的表单,然后单击工具箱,我看不到用户控件。

C# adding usercontrol from different project in solution 的答案建议将其公开,但用户控件是公开的,无论如何这是默认设置。 public partial class UserControl1 : UserControl

【问题讨论】:

    标签: c# .net winforms user-controls


    【解决方案1】:

    我想我有答案了。

    不需要添加带有用户控件的项目,这没有帮助。

    右键单击要将用户控件导入其中的解决方案。所以在这种情况下,“ProjectA”然后单击添加,然后单击现有项。然后浏览到另一个项目中的用户控件,就OK了。

    然后你会看到用户控件出现在你想要的项目下。

    而且你还会发现用户控件会出现在工具箱中。 (当然,您可能必须重建解决方案 - build..rebuild 解决方案,但无论如何之前都是如此)

    您也可以从您的解决方案中删除带有用户控件的项目,它没有任何意义,它不会将用户控件带入另一个项目 projectA 或一般的解决方案中,所以没有意义,如前所述,将用户控件单独添加到您的项目中。正是缺少这一点,这就是我没有在该项目的工具栏中获得用户控件的原因。

    但它似乎确实是复制,而不是参考。

    【讨论】:

    • 不,不要复印。这将违背代码重用的目的。您在解决方案中有 2 个基于 Windows 窗体的项目 - 它们都编译为 EXE。尝试将项目属性中的输出类型更改为类库而不是用于 testusercontrolproj 的 Windows 应用程序,删除复制的用户控件,看看你能走多远。
    • 我需要添加一个复杂的用户控件,其中包含 2 个表单和一个在一个解决方案中添加到另一个解决方案的 Nuget 包。我按照上面的建议做了,添加了两个用户控件表单,但还必须添加对在 UserControl 解决方案中创建的 dll 的引用,并将 Nuget 包添加到主表单。用户控件随后出现在工具箱中,但我需要以编程方式添加多个副本。我发现我必须将 UserControl 称为 UserControl.UserControl 以避免错误消息 UserControl is a Namespace but is used like a type.There is still a warning message about Type ambiguity.
    • 我还必须将 UserControl 解决方案中的资源设为 Public 而不是 Internal,以避免出现“由于保护级别而无法访问资源”消息。
    • 原来不需要添加 dll 引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多