Position einer Messabox verändern
-
Hoi,
weiß jemand wie man eine
MessageBox.Show("Invalid ID", "Error");
an einem bestimmten Punkt am Bildschirm erzeugen kann ?
z.b. rechts unterhalb des derzeit aktiven Fensters in dessen Kontext die Messagebox aufgerufen wurde ?Seis gedankt !
MrMessagebox
-
Die Standardmessagebox hat sowas glaube jetzt nicht ohne das ich jetzt direkt
nachgeguckt habe!Alternative auf jeden Fall:
Füge ne neue Form zu deiner Anwendung, platziere Element drauf und lass das Ding wie ne MessagBox aussehen. Diese Form kannste dann mit
Showdialog aufrufen. Spendier dieser neuen Klasse 2 Propertys die public sind und benutze bei den den set - Accessorso in etwa:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace EigenbauMessageBox { /// <summary> /// Zusammenfassung für MyMessageBox. /// </summary> public class MyMessageBox : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; public MyMessageBox() { // // Erforderlich für die Windows Form-Designerunterstützung // InitializeComponent(); // // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu // } /// <summary> /// Die verwendeten Ressourcen bereinigen. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Vom Windows Form-Designer generierter Code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(16, 32); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(264, 208); this.label1.TabIndex = 0; this.label1.Text = "label1"; // // MyMessageBox // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.label1); this.Name = "MyMessageBox"; this.Text = "MyMessageBox"; this.ResumeLayout(false); } #endregion public string Titel { set { this.Text = value; } } public string Caption { set { label1.Text = value; } } } }
Was bringt Dir das weil es eine EigenbauMessagBox ist hat die Ihre
Eigenschaft Location
damit kannst Du dann bestimmen wo das Teil auf Deiner Röhre auftaucht!Verwendung dann in etwa so:
try { // hier tritt ein Fehler auf ich brauch eine MessagBox an bestimmter Position } catch(System.Exception ex) { // jetzt statt MessagBox.Show(...); MyMessageBox myMsgBox = new MyMessageBox(); myMessageBox.Titel = "Fehler"; myMessageBox.Caption = ex.Message; myMessageBox.Location = new Point(xScreen,yScreen); myMessageBox.ShowDialog(); }
hoffe geholfen zu haben
-
Es fehlt noch das DialogResult, der AcceptButton und der CancelButton.
-
Noodles schrieb:
Es fehlt noch das DialogResult, der AcceptButton und der CancelButton.
Ja stimmt habe ich vergessen aber man muss ja nur noch 2 Buttons draufsetzen fuer Ok und Cancel. Um dann noch die Closing-Ereignissmethoden ueberladen um in derer Ausimplementierung
das Dialogresult entsprechend ob Ok oder Cancelknopf gedrueckt wurde setzen.mein Zitat:
Manchmal denkt man indirekt schon weiter um es dann trotzdem in der Niederschrift zu vergessen, ob muendlich oder schriftlich. In diesem Sinne
man muss halt miteinander reden. Danke sei dem kollegialen Miteinander!
-
Alternative Methode:
Einen Thread erstellen, der gestartet wird, bevor die MessageBox erstellt wird, ein paar Millisekunden wartet, das Fenster der MB sucht und dieses dann verschiebt.
So hast du die Position der Standard-MB verändert.An sich finde ich es aber auch besser eine eigene MB zu schreiben. Ist ja nicht direkt schwierig - hält aber Platz für weitere Veränderungen offen
Greetz
-
sclearscreen schrieb:
Um dann noch die Closing-Ereignissmethoden ueberladen um in derer Ausimplementierung
das Dialogresult entsprechend ob Ok oder Cancelknopf gedrueckt wurde setzen.Das DialogResult kann man als Property des Button setzen.
-
!!!man lernt nie aus!!!
-
Manuel schrieb:
Alternative Methode:
Einen Thread erstellen, der gestartet wird, bevor die MessageBox erstellt wird, ein paar Millisekunden wartet, das Fenster der MB sucht und dieses dann verschiebt.
So hast du die Position der Standard-MB verändert.An sich finde ich es aber auch besser eine eigene MB zu schreiben. Ist ja nicht direkt schwierig - hält aber Platz für weitere Veränderungen offen
Greetz
Also wenn ich Dich richtig verstehen sucht Du z.B.: mit dem Thread
ueber die WinAPI-Funktion "FindWindow" (einverleibt per DllImport) etc. das HANDLE der MessagBox suchenum die im nachhinein und per Move-Irgendwas durch den Thread verschieben zu lassen?