2012-09-17 63 views
0

我有一個WPF項目,我已經添加了Windows窗體。WPF在Windows窗體上運行命令

窗體窗體有一個方法runme()。但我想從WPF表單中調用它。

目前我使用

Dim wpfForm as new wpfForm 
wpfForm.Show() 

顯示從Windows窗體的WPF的形​​式。

雖然我不確定如何發回命令。

我已經試過:

Me.parent.runme() 

但是這給了我錯誤

+0

什麼是錯誤 –

+0

是否可以向您的wpfForm添加構造函數參數?您可以使用[依賴注入](http://en.wikipedia.org/wiki/Dependency_injection)爲父項提供參考。你甚至可以使用一個接口,而不是強迫你的WPF表單接受一個WinForm表單作爲參數。 – JDB

+0

我得到的錯誤是'類型'System.Windows.Window'的值無法轉換爲'WpfApplication1.MainWindow'。' – Akshat

回答

0

最終什麼工作是創建一個接口,通過Cyborgx37

的建議
Interface ILogOut 
    Sub DoIt() 
End Interface 

Class WinFormWindow : Implements ILogOut 
    Public Sub DoIt() Implements ILogOut.DoIt 
     MsgBox("Message Received!") 
    End Sub 
End Class 

然後,您可以使用一世LogOut接口從WPF窗口向Windows窗體窗口發送消息

0

,我能想到的做你想要什麼的唯一方法是創建一個自定義構造函數爲您的Winform和通它對Wpf窗口的引用。 There appears to be no easy way將WPF窗口分配爲Winforms窗口的所有者/父項。

的WinForms表格

Public Class Form1 
    Dim myParent As System.Windows.Window 
    Public Sub New() 
     InitializeComponent() 
    End Sub 

    Public Sub New(parent As System.Windows.Window) 
     myParent = parent 
     InitializeComponent() 
    End Sub 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     CType(myParent, MainWindow).runMe() 
    End Sub 

End Class 

WPF窗體

Class MainWindow 
    Dim winForm As Form1 
    Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click 
     winForm = New Form1(Me) 
     winForm.Show() 
    End Sub 
    Public Sub runMe() 
     Me.Background = Brushes.Red 
    End Sub 
End Class 
+0

這將產生與以前相同的錯誤,類型爲CType(..)..類型值'System.Windows.Window'不能轉換爲'WpfApplication1.MainWindow'。'' – Akshat

+0

以及'WpfApplication1.Main'不能轉換爲'System.Windows.Window',而實例化WPF窗口 – Akshat

+0

@Akshat This爲我工作沒有錯誤。確保您使用WPF Windows類的名稱。另外,從Wpf窗口創建Winforms窗口,或者從Winforms窗口創建Wpf窗口都有點令人困惑。如果以後有方法可以工作。 –