【问题标题】:C# - How to open a Windows Form in DLLC# - 如何在 DLL 中打开 Windows 窗体
【发布时间】:2026-01-15 22:55:01
【问题描述】:

我有两个程序: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 寻求支持。

标签: c# windows winforms dll


【解决方案1】:

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

【讨论】:

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