nicht modaler, schwebender Dialog
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.
-
-
Statt
.ShowDialog()
benutzt du.Show()
.Antivirus 2.0: Der perfekte Schutz gegen Malware > Weitere Informationen
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten? -
Falls WPF, dann gibt es hierfür das Adorner.
Grüße
SaschaIf _work = worktype.hard Then Me.Drink(Coffee)
Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##
-
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen
Ich habe gefunden "Bei nicht modalen Dialogen verhindert der Aufruf .Show(Me), dass der Dialog hinter das aufrufende Fenster (Parent) geklickt werden kann, was bei .Show() möglich ist." und werde das ausprobieren.
Jetzt hoffe ich nur, dass das aufrufende Fenster (Parent) auch die Word-Anwendung sein kann.Grüße
praetor -
praetor schrieb:
dass das aufrufende Fenster (Parent) auch die Word-Anwendung sein kann.VB.NET
oder hast Du wasVBA
-artiges am Laufen?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Zitat von praetor: „dass das aufrufende Fenster (Parent) auch die Word-Anwendung sein kann.“Reden wir noch von VB.NET oder hast Du was VBA-artiges am Laufen?
Nein, wir reden schon von VB.NET. Es geht aber um ein Addin zu Word.Grüße
praetor -
.Show(Me) klappt bei einem normalen Programm ohne Weiteres.
Aber ich hab ein Problem, im VSTO-Umfeld auch nur überhaupt ein Form anzuzeigen. Muss da noch etwas importiert werden? Irgenwie wird da ein Objektverweis benötigt. Mir fehlen da echt die Grundlagen und ich bräuchte mal ein paar Tipps für den Einstieg.
Grüße
praetor -
--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()
-
@petaod, Danke, funktioniert! Eigentlich meine ich, dass ich das gestern so schon probiert hätte. Aber da wohl doch noch irgendwas falsch.
Was aber dann in dem Kontext nicht funktioniert ist,
Es kommt der Fehler "Das Objekt des Typs "WordAddIn_modal.ThisAddIn" kann nicht in Typ "System.Windows.Forms.IWin32Window" umgewandelt werden." Was ist da zu tun?Grüße
praetor -
praetor schrieb:
Was ist da zu tun?Me
ist keine Form bzw. ein Fenster.
Du müsstest da so was wie ein Window-Handle übergeben.
Wenn Du das von Word hast, kannst Du auch mit SetParent arbeiten.
pinvoke.net/default.aspx/user32.setparent
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Wenn Du das von Word hast, kannst Du auch mit SetParent arbeiten.
Lange rumprobiert, aber ich bekomme es leider nicht hin, den ersten Dialog über dem Word-Fenster nichtmodal und schwebend anzuzeigen.
Mir fehlt da wohl noch zu viel Hintergrundwissen. Für ein funktionierendes Beispiel wäre ich sehr dankbar!Grüße
praetor -
Vielleicht beschreibe ich mal noch etwas genauer, wo es hängt.
- VSTO-Projekt
- Form 1 soll im aktuellen Wordfenster als als nichtmodales Fenster angezeigt werden, das über dem Wordfenster sichtbar bleibt, auch wenn es gerade nicht den Fokus hat
Warum funktioniert Zeile 12 so nicht? Was muss ich ändern?
VB.NET-Quellcode
-
- Imports System.Diagnostics
- Imports System.Threading
- Public Class Form1
- Declare Auto Function SetParent Lib "user32" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- ' aktuelles Word-Fenster soll referenziert werden
- Dim meinWord As Word.Application = GetObject(, "Word.Application")
- Thread.Sleep(100)
- ' erster Parameter = eingebettetes nichtmodales Fenster
- ' zweiter Parameter = Mutterfenster, in welchem das Fenster eingebettet wird
- SetParent(Me.Handle, meinWord)
- End Sub
- End Class
Grüße
praetor -
@praetor Sieh doch mal im Objektbrowser nach, was
SetParent()
für Parameter erwartet, hier ist der Typ gefragt.
Danach beschäftigen wir uns damit, woher wir den richtigen Parameter bekommen.
====
Vielleicht probierst Du mal,.TopMost = True
zu setzen, das sollte Dein Problem lösen, allerdings ist das nicht ganz elegant.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Sieh doch mal im Objektbrowser nach, was SetParent() für Parameter erwartet, hier ist der Typ gefragt.
Danach beschäftigen wir uns damit, woher wir den richtigen Parameter bekommen.
Wenn ich das richtig sehe, wird eine Variable vom Typ IntPtr erwartet, der den Handler der abzusprechenden Komponente repräsentiert. Aber wie kommt man ran?
Vielleicht probierst Du mal, TopMost = True zu setzen,…
Funktioniert! Aber die Lösung über SetParent() hätte den Vorteil, dass die Form auf das Word-Fenster beschränkt bleibt. Das wäre natürlich wesentlich besser.Grüße
praetor -
praetor schrieb:
wird eine Variable vom Typ IntPtr erwartet
docs.microsoft.com/en-us/windo…user/nf-winuser-setparent
Der erste Parameter ist das Handle Deines Dialogs, der zweite Parameter ist das Handle von Word.
Probier mal dies:
VB.NET-Quellcode
- Imports System.Runtime.InteropServices
- Public Class Form1
- <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
- Public Shared Function SetParent(hWndChild As IntPtr, hWndNewParent As IntPtr) As IntPtr
- End Function
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim pr() = Process.GetProcessesByName("WINWORD")
- If pr.Length > 0 Then
- Form1.SetParent(Me.Handle, pr(0).MainWindowHandle)
- End If
- End Sub
- End Class
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Probier mal dies:…
Klappt leider noch nicht. Die Zuweisung an pr funktionert. Dessen Länge ist danach 1. Aber Form1.SetParent(Me.Handle, pr(0).MainWindowHandle) hat dann keinen Effekt auf die Form.Grüße
praetor -
@praetor Bei mir funktioniert das wie gewünscht.
Was hast Du für ein Studio / Word?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
Was hast Du für ein Studio / Word?
Ich nutze VS Community 2017 und Office 365 Pro Plus.
Wenn ich Deinen Code in ein Windows Forms App ausführe, funktioniert es. Aber in einem VSTO-Add-In läuft es nicht.
Im Word-Umfeld hatte ich mich etwas verwirren lassen, weil ältere Add-In-Versuche noch mit gestartet wurden. Das hab ich nun bereinigt.
Der aktuelle Code führte im VSTO-Add,In zu
1>------ Erstellen gestartet: Projekt: WordAddIn_modal, Konfiguration: Debug Any CPU ------
1>C:\Users\praet\source\repos\WordAddIn_modal\WordAddIn_modal\Form1.vb(9,20): error BC30451: "Process" wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich.
========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========
den ich mit beheben konnte.
Aber Button1 führt zu keinem Effekt, Form1 wandert nicht in das Word-Fenster.
Wenn man das ganze mehrfach startet, lässt interessanterweise aber das eine Form1-Fenster aber in das andere einfügen:Grüße
praetor
-
Ähnliche Themen
-
Eigenschaft TopMost von Formular erweitern?
meerschweinegrippe - - Sonstige Problemstellungen -
miesss_ - - Sonstige Problemstellungen
-
5 Benutzer haben hier geschrieben
- praetor (12)
- RodFromGermany (8)
- petaod (3)
- slice (1)
- Nofear23m (1)