Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
.net 是否从WPF应用程序打开WinForm?_.net_Wpf_Winforms - Fatal编程技术网

.net 是否从WPF应用程序打开WinForm?

.net 是否从WPF应用程序打开WinForm?,.net,wpf,winforms,.net,Wpf,Winforms,我已经创建了一个WPF和WinForm应用程序,我需要做的是 从WPF应用程序打开WinForm。两者都在同一个解决方案中,但它们是不同的项目 我尝试了以下方法: Dim newWinForm as New MainWindow newWinForm.show() 我从这里找到了一个可能的解决方案: 但我不明白我到底要做什么。我希望你能帮助我。谢谢 通常,您需要在, 类似于WPF窗口按钮中的以下内容。单击事件处理程序: C#: VB: 当然,您需要添加项目和System.Windows.Fo

我已经创建了一个WPF和WinForm应用程序,我需要做的是 从WPF应用程序打开WinForm。两者都在同一个解决方案中,但它们是不同的项目

我尝试了以下方法:

Dim newWinForm as New MainWindow
newWinForm.show()
我从这里找到了一个可能的解决方案:


但我不明白我到底要做什么。我希望你能帮助我。谢谢

通常,您需要在, 类似于WPF窗口按钮中的以下内容。单击事件处理程序:

C#:

VB:


当然,您需要添加项目和System.Windows.Forms.dll的引用/导入。从WPF应用程序加载win表单是不可能的。 所以你可以这样做:

1-在winform项目中创建用户控件,并将所有窗体元素添加到用户控件中

public partial class myUserControl : UserControl, IDisposable 
{
...// All Form Code and element put here
}
2-创建一个wpf窗口并在其中放置一个网格:

<Grid Name="grid">

</Grid>

3-关于Wpf窗口的代码如下:

public partial class myWpfWindow: Window
{
    public myWpfWindow()
    {
        InitializeComponent();

        myUserControl = new myUserControl ();
        System.Windows.Forms.Integration.WindowsFormsHost winformHost = new 
             System.Windows.Forms.Integration.WindowsFormsHost();
        winformHost.Child = myUserControl;

        grid.Children.Add(winformHost);  // --> <Grid Name="grid">

    }

}
公共部分类myWpfWindow:Window
{
公共myWpfWindow()
{
初始化组件();
myUserControl=newmyusercontrol();
System.Windows.Forms.Integration.WindowsFormsHost winformHost=新建
System.Windows.Forms.Integration.WindowsFormsHost();
winformHost.Child=myUserControl;
grid.Children.Add(winformHost);//-->
}
}

4-为项目添加两个引用:
WindowsFormsIntegration,System.Windows.Forms

让我们假设这两个项目被称为
WPFApp
WinFormApp

它们都声明了一个
MainWindow
类,该类是主应用程序窗口

要从
WPFApp
应用程序打开
WinFormApp
main窗口
,只需在
WPFApp
项目上执行以下操作:

  • 添加对
    WinFormApp
    项目的引用
  • 添加对
    System.Windows.Forms的引用
  • 创建一个新的
    WinFormApp.MainWindow
    对象
  • 对其调用
    Show()

  • a
    Process.Start(“Winform.exe”)
    可能是另一种方法……是的,我也这么做了,但是WPF应用程序是一个登录表单,所以我认为这不是一个好的选择。谢谢您好,现在当WinForm应用程序启动时,它在这一行出现异常:Dim conexion作为新的SqlConnection(ConfigurationManager.ConnectionString(“CONN”).ConnectionString)对象引用未设置为对象的实例,它是一个实例变量。问候语!它只是意味着代码中的某些内容为空或为零。这可能是因为您错过了一些用于构建连接字符串等的初始化代码。我的示例代码没有创建新进程,因此您的WinForm应用程序永远不会启动。如果你想启动一个新的进程,你可以试试@Jeremy Thompson的注释
    process.start(“Winform.exe”)我刚刚让它工作起来,但现在我遇到了一个问题:当新的WinForm被呈现时,控件看起来像Win98应用程序,一种旧的外观。问候语!您需要通过调用
    System.Windows.Forms.Application.EnableVisualStyles()来启用视觉样式
    System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false)在创建窗口之前。您可以查看WinForm项目中的Program.cs。干杯不,您不需要使用任何互操作或奇特的东西。您只需从WPF one中引用WinForm项目,创建WinForm对象,并对其调用
    Show()
    。此示例与所示示例相匹配:
    <Grid Name="grid">
    
    </Grid>
    
    public partial class myWpfWindow: Window
    {
        public myWpfWindow()
        {
            InitializeComponent();
    
            myUserControl = new myUserControl ();
            System.Windows.Forms.Integration.WindowsFormsHost winformHost = new 
                 System.Windows.Forms.Integration.WindowsFormsHost();
            winformHost.Child = myUserControl;
    
            grid.Children.Add(winformHost);  // --> <Grid Name="grid">
    
        }
    
    }