Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回值而不关闭窗口wpf_C#_Wpf_Dll_Window - Fatal编程技术网

C# 返回值而不关闭窗口wpf

C# 返回值而不关闭窗口wpf,c#,wpf,dll,window,C#,Wpf,Dll,Window,我希望在不关闭WPF窗口的情况下,从WPF窗口获得一个返回值 我有一个里面有WPF usercontrol的DLL,我从我的DLL代码中调用它。 我必须调用它,它返回数据,然后我发送数据。 但我不想创建同一窗口的两个不同实例 我的代码: MP.UserControl1 a = new MP.UserControl1(); a.ShowDialog(); if (a.DialogResult.HasValue && a.Dialog

我希望在不关闭WPF窗口的情况下,从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;
然后我详细阐述了初始数据

现在我想在我的“a”中调用一个方法,并再次显示它,而不创建新窗口

代码:

        a.SetValue(result, off1, InitialDatas);
        a.ShowDialog();
我收到错误消息:无法设置可见性或在窗口关闭后调用Show、ShowDialog或EnsureHandle
有可能解决吗?

我会用事件模型来解决这个问题。您可以执行以下操作:

  • 在表单中创建一个事件
  • 在调用者中创建事件处理程序
  • 订阅事件并执行您的逻辑
所称形式:

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();

我会用事件模型来解决这个问题。您可以执行以下操作:

  • 在表单中创建一个事件
  • 在调用者中创建事件处理程序
  • 订阅事件并执行您的逻辑
所称形式:

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();

正如错误消息所述,您无法关闭窗口,然后再次打开它

您可以通过调用
hide()
方法隐藏窗口,然后通过调用
Show()
方法再次显示窗口,而不是关闭窗口

但是由于
ShowDialog()
方法在窗口关闭之前不会返回,因此这对于对话框窗口不起作用。如果您需要一个模态窗口,那么您必须创建一个新的窗口实例并打开这个实例。但这不应该是个问题


因此,我猜您的问题的答案是否定的。您无法重新打开已关闭的对话框窗口。

正如错误消息所述,您无法关闭窗口,然后再次打开它

您可以通过调用
hide()
方法隐藏窗口,然后通过调用
Show()
方法再次显示窗口,而不是关闭窗口

但是由于
ShowDialog()
方法在窗口关闭之前不会返回,因此这对于对话框窗口不起作用。如果您需要一个模态窗口,那么您必须创建一个新的窗口实例并打开这个实例。但这不应该是个问题


所以我想你的问题的答案是否定的。你不能重新打开一个关闭的对话框窗口。

对话框必须是模态的吗?为什么不将数据/结果存储在ViewModel中,只需创建对话框的新实例并将其指向同一个ViewModel实例?对话框必须是模态的吗?为什么不将数据/结果存储在ViewModel中,只需创建对话框的新实例并将其指向同一个ViewModel实例?