Ich habe eine grundlegende Frage. Ich erstelle ein VSTO Word Addin. Ich habe eine Ribbon-Schaltfläche, die ein WPF-Dialogfeld namens TableSelector öffnet. Es wird in einem Windows-Formular gehostet.Wie Windows-Formularobjekt anderen Klassen ordnungsgemäß verfügbar machen
Public Class RibbonControl
Private f As Form
Private Sub btnSelectTable_Click(sender As Object, e As RibbonControlEventArgs) Handles btnSelectTable.Click
Dim h As New System.Windows.Forms.Integration.ElementHost()
Dim tableselector1 As New TableSelector
f = New Form()
f.MaximumSize = New Size(500, 380)
f.MinimumSize = New Size(500, 380)
f.MaximizeBox = False
f.Name = "HostForm"
h.Dock = DockStyle.Fill
h.Child = tableselector1
f.Controls.Add(h)
f.Show()
f.TopMost = True
End Sub
Public ReadOnly Property hostForm() As Form
Get
Return f
End Get
End Property
End Class
Dann habe ich eine Schließen-Schaltfläche auf diesem WPF-Steuerelement, um das Dialogfeld zu schließen. Wenn ich darauf klicke, bekomme ich den Laufzeitfehler "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt". in Zeile 3 des folgenden Codes.
Private Sub btnClose_Click(sender As Object, e As RoutedEventArgs) Handles btnClose.Click
Dim ribbon As New RibbonControl()
ribbon.hostForm.Close()
End Sub
Was fehlt mir?
Hallo, vielen Dank für Ihre schnelle Antwort nahe. Ich verstehe die Verwendung der SingleOrDefault-Methode nicht. Was bedeutet "w"? – miro
Haben Sie überprüft, ob dieser Code funktioniert? SingleOrDefault prüft die Sammlung von Fenstern und gibt eine einzelne Fensterinstanz gemäß der angegebenen Bedingung zurück, dh (w => w.Name == "Fenstername"). Das heißt, es wird ein Fenster ** w ** aus der Windows-Sammlung ausgewählt, wobei ** w.Name ** gleich ** einem Zeichenfolgenwert entspricht, der Ihrem Fensternamen entspricht **. Sie müssen LINQ- und LAMBDA-Ausdrücke mehr lernen. – ViVi
Ich kann es nicht versuchen, weil 1) es in C# und 2) Addin-Projekte sind unterschiedlich. Beispielsweise hat das Anwendungsobjekt, das in einem VSTO-Add-In verfügbar ist, keine aktuelle Methode. Ich habe versucht, die Globals.ThisAddin.Application.Windows-Auflistung abzufragen, aber es enthält das Dialogfeld überhaupt nicht. Nur geöffnete Dokumente. Ich würde es vorziehen, den oben angegebenen Code zu korrigieren. – miro