我希望从我的WPF窗口获得一个返回值而不关闭它。
我有一个带有WPF usercontrol的DLL,我从我的DLL代码中调用它。 我必须调用它,它返回数据,然后我发送数据。 但我不想创建同一窗口的两个不同实例。
我的代码:
MP.UserControl1 a = new MP.UserControl1();
a.ShowDialog();
if (a.DialogResult.HasValue && a.DialogResult.Value == true)
{
a.Hide();
InitialDatas = a.inputData;
}
else
return 0;
然后我详细说明了InitialDatas
现在我想在我的“a”中调用一个方法,并再次显示它,而不会创建一个新窗口。
代码:
a.SetValue(result, off1, InitialDatas);
a.ShowDialog();
我收到错误消息:窗口关闭后无法设置可见性或调用Show,ShowDialog或EnsureHandle 有可能解决吗?
答案 0 :(得分:2)
如错误消息所示,您无法关闭窗口,然后再次打开它。
您可以通过调用Hide()
方法隐藏它,而不是关闭窗口,然后通过调用Show()
方法再次显示它。
但是由于ShowDialog()
方法在窗口关闭之前不会返回,但这对于对话框窗口不起作用。如果需要模态窗口,则必须创建窗口的新实例并打开此窗口。但这不应该是一个问题。
所以我猜你问题的答案根本就是不。您无法重新打开关闭的对话窗口。
答案 1 :(得分:1)
我会用事件模型来解决这个问题。您可以执行以下操作:
被叫表格:
namespace MyApplication
{
public delegate void MyEventHandler(object source, EventArgs e);
public class MyForm : Form
{
public event MyEventHandler OnInitialData;
private void btnOk_Click(object sender, EventArgs e)
{
OnInitialData?.Invoke(this, null);
}
}
}
在您的其他表格中:
MP.UserControl1 a = new MP.UserControl1();
a.OnInitialData += UCA_OnInitialData;
private void UCA_OnInitialData(object sender, EventArgs e)
{
MP.UserControl1 a = sender as MP.UserControl1;
a.SetValue(result, off1, a.inputData);
}
a.ShowDialog();