C# - 如何在 DLL 中打开 Windows 窗体
Posted
技术标签:
【中文标题】C# - 如何在 DLL 中打开 Windows 窗体【英文标题】:C# - How to open a Windows Form in DLL 【发布时间】:2019-03-29 02:04:31 【问题描述】:我有两个程序:DesktopApp1
和 DesktopApp2
。它们都是 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 2 的 button1
并打开一个新的 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 窗体的主要内容,如果未能解决你的问题,请参考以下文章