PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VS .NET 2003 - MessageBox.Show() ausgabe


Durcairion
2005-11-29, 17:30:39
Ich stehe vor folgendem Problem, ich hab ein Programm und würd gern die Meldung zentriert über dem Hauptfenster ausgeben. Bisher erscheint die Meldung immer zentriert auf dem gesamten Bildschirm.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic2.asp

Aus der Beschreibung werd ich nicht schlau.

MessageBox.Show(OWNER,"Text");

Aber wie muss ich den Owner angeben? ... das Raff ich einfach nicht

Sephiroth
2005-11-29, 17:54:18
vielleicht hilft dir ja das: http://ryanfarley.com/blog/archive/2004/03/23/465.aspx

Gast
2005-11-29, 19:40:38
Aber wie muss ich den Owner angeben? ... das Raff ich einfach nicht
OWNER sollte in Deinem Fall eine Referenz auf Dein Hauptfenster sein. Im Falle, daß der MessageBox-Aufruf aus dem Kontext des Hauptfensters heraus erfolgt, wäre das dann einfach
MessageBox.Show(this, "blubb")

Durcairion
2005-11-29, 19:45:57
OWNER sollte in Deinem Fall eine Referenz auf Dein Hauptfenster sein. Im Falle, daß der MessageBox-Aufruf aus dem Kontext des Hauptfensters heraus erfolgt, wäre das dann einfach
MessageBox.Show(this, "blubb")

Leider Funktioniert es mit dem this Zeiger nicht, das hatte ich auch schon probiert.

Coda
2005-11-29, 20:33:11
Du must natürlich das Objekt übergeben dass das Fenster repräsentiert über welchem die MessageBox angezeigt werden soll.

Du kannst nicht in irgend ner Klasse "this" benützen dafür X-D

this-Zeiger? Du benützt doch C# oder nicht? Da ist this kein Zeiger.

Gast
2005-11-29, 22:05:36
Leider Funktioniert es mit dem this Zeiger nicht, das hatte ich auch schon probiert.

Tschuldige, ich meinte natürlich MessageBox.Show(this.Handle, "bla")

grakaman
2005-11-29, 22:23:46
Du must natürlich das Objekt übergeben dass das Fenster repräsentiert über welchem die MessageBox angezeigt werden soll.

Du kannst nicht in irgend ner Klasse "this" benützen dafür X-D

this-Zeiger? Du benützt doch C# oder nicht? Da ist this kein Zeiger.

Wieso sollte das nicht gehen? Wichtig ist doch, woher der Aufruf kam, da der Owner IWin32Window implementieren muss. Das trifft schon mal auf alle GUI Elemente zu, da die eh von System.Windows.Forms.Control erben und System.Windows.Forms.Control zu gleich auch System.Windows.Forms.IWin32Window implementiert.

grakaman
2005-11-29, 22:27:00
Tschuldige, ich meinte natürlich MessageBox.Show(this.Handle, "bla")

Das kann gar nicht funktionieren, da dein Handle ein IntPtr Struct ist. Der Parameter muss aber eine Typ sein, der IWin32Window implementiert.

Gast
2005-11-29, 23:19:09
Wichtig ist doch, woher der Aufruf kam, da der Owner IWin32Window implementieren muss. Das trifft schon mal auf alle GUI Elemente zu, da die eh von System.Windows.Forms.Control erben und System.Windows.Forms.Control zu gleich auch System.Windows.Forms.IWin32Window implementiert.

D.h., daß ich mich beim erstenmal doch nicht vertan hab, oder? Wohlgemerkt, ich bezog mich da explizt auf einen Aufruf aus einer Form-Instanz.

grakaman
2005-11-29, 23:38:40
D.h., daß ich mich beim erstenmal doch nicht vertan hab, oder? Wohlgemerkt, ich bezog mich da explizt auf einen Aufruf aus einer Form-Instanz.

Dann hätte es in dem Fall kompiliert, aber das Problem mit dem Zentrieren wäre damit nicht gelöst. Ich weiß allerdings auch nicht, wie man das jetzt mit .NET Mitteln hinbekommt. Aber mit Win32 API Aufrufen könnte man die EnumWindows Funktion ansprechen und dort die Eigenschaften für das Fenster setzen.

edit: http://www.vbaccelerator.com/home/NET/Code/Libraries/Windows/Enumerating_Windows/EnumWindows_Code.asp