C# - 如何在 DLL 中打开 Windows 窗体

Posted

技术标签:

【中文标题】C# - 如何在 DLL 中打开 Windows 窗体【英文标题】:C# - How to open a Windows Form in DLL 【发布时间】:2019-03-29 02:04:31 【问题描述】:

我有两个程序:DesktopApp1DesktopApp2。它们都是 Windows 窗体,但第一个输出到 类库 (.dll),第二个引用它。

表格 1(dll):

namespace DesktopApp1

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        public void generate()
        
            crystalReportViewer1.ReportSource = @"C:/Users/me/rel1.rpt";
        
    

表格 2:

// ...
using DesktopApp1;

namespace DesktopApp2

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
        

        private void button1_Click(object sender, EventArgs e)
        
            DesktopApp1.Form1 r = new DesktopApp1.Form1();
            // The Form 1 window doesn't opens. Nothing happens.
            r.generate();
        
    

我的期望:

用户点击 Form 2button1 并打开一个新的 Form 1 (DLL) 窗口,执行 generate 方法。

实际发生的情况:

用户点击button1,鼠标光标变为加载状态,屏幕上没有任何显示。

我可能做错了什么?还有其他方法可以将 Windows 窗体转换为 DLL 并从另一个程序打开它吗?

【问题讨论】:

使用 Debug > Break All, Debug > Windows > Threads 并验证是否选择了主线程。查看调用堆栈窗口以了解它在做什么。当您不可避免地断定 CrystalReports 无法正常工作时,请联系 SAP 寻求支持。 【参考方案1】:

使用 Form.Show(...) 或 Form.ShowDialog(...) 方法。

【讨论】:

您应该使用 MSDN 获取此类信息(它将为您提供更多详细信息),或者仅使用 Visual Studio 内置的 Intellisense。参数都是可选的,因此您可以在没有参数的情况下调用任一方法。 (编辑:我之前回复的评论已被删除) 很高兴听到这个消息。请务必将此标记为答案:)

以上是关于C# - 如何在 DLL 中打开 Windows 窗体的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#做的网页里添加bin文件和DLL?

c#打开cad更新的同时更新dll

如何在 C# 中捕获 Windows 应用商店应用程序的窗口内容

在 Windows / C# 中卸载 DLL

c#如何将一个类库打包成两个dll

C#如何静态调用C++中的方法(静态调用dll)