C#-如何在DLL中打开Windows窗体
我有两个程序:C#-如何在DLL中打开Windows窗体,c#,windows,winforms,dll,C#,Windows,Winforms,Dll,我有两个程序:DesktopApp1和DesktopApp2。它们都是Windows窗体,但第一个窗体输出到类库(.dll),第二个窗体引用它 表格1(dll): namespace DesktopApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void g
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";
}
}
}
// ...
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();
}
}
}
表格2:
namespace DesktopApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void generate()
{
crystalReportViewer1.ReportSource = @"C:/Users/me/rel1.rpt";
}
}
}
// ...
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();
}
}
}
我的期望:
namespace DesktopApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void generate()
{
crystalReportViewer1.ReportSource = @"C:/Users/me/rel1.rpt";
}
}
}
// ...
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();
}
}
}
用户单击表单2的按钮1
,执行生成
方法时,会打开一个新的表单1(DLL)窗口
实际发生的情况:
namespace DesktopApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void generate()
{
crystalReportViewer1.ReportSource = @"C:/Users/me/rel1.rpt";
}
}
}
// ...
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();
}
}
}
用户单击按钮1
,鼠标光标变为加载状态,屏幕上没有显示任何内容
我可能做错了什么?有没有其他方法可以将Windows窗体转换为DLL并从另一个程序打开它?使用Form.Show(…)或Form.ShowDialog(…)方法。对于此类信息,您应该使用MSDN(它将提供更多详细信息),或者只使用Visual Studio内置的Intellisense。这些参数都是可选的,因此您可以不带参数地调用任何一个方法。(编辑:我之前回复的评论被删除)很高兴听到。请确保将此标记为答案:)使用调试>全部中断、调试>窗口>线程,并验证是否已选择主线程。查看“调用堆栈”窗口以了解它在做什么。当您不可避免地得出CrystalReports无法正常工作的结论时,请联系SAP寻求支持。