2009-07-18 4 views
2

Ich verwende VSTS 2008 + C# + .Net 2.0, um eine Windows Forms-Anwendung zu entwickeln. In der Standardform1 habe ich eine Schaltfläche, und klicken Sie auf die Schaltfläche wird ein anderes Formular - Form2 aufrufen.Wie wird ein Windows Form immer oben angezeigt?

Meine Frage ist, ich möchte Form2 immer an der Spitze, d. H. Benutzer muss Antwort Form2 (Informationen in Form2 ausfüllen und schließen), bis der Benutzer weiterhin mit Form1 umgehen konnte. Wie implementiert man diese Funktion?

Hier ist mein aktueller Code.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 form2 = new Form2(); 
     form2.Visible = true; 
    } 
} 

Antwort

16

Die beste Option, genau das zu tun, was Sie wollen, ist form2 ein Dialogfeld zu machen. Sie tun dies, indem Sie seine Methode aufrufen.

+0

+1 - George sollte modalen Dialog verwenden, nicht zuoberst. –

+0

Danke Alex, deine Lösung funktioniert! – George2

+0

meine App geöffnet, aber unter anderen Fenstern (verstecken sich hinter anderen), wenn wir Tray-Anwendung haben und oben auf andere Fenster durch Klicken auf Tray-Icon oder per Hotkey sein wollen ... dachtest du @Mihail ist die Antwort besser? oder ich liege falsch? –

8

versuchen diese

this.TopMost = true; 
+0

Leider Ihre Lösung funktioniert nicht. Ich habe den Code form2.TopMost = true hinzugefügt, aber nachdem ich den Code hinzugefügt habe, kann ich Form2 weiterhin entfernen und mit der Antwort auf Form1 fortfahren. Irgendwelche Ideen was ist falsch? – George2

+0

Die beste Lösung für eine Anwendung (viele Formulare) ist die ShowDialog-Methode. –

1

Angenommen, Sie möchten verhindern, dass der Benutzer mit Form1 interagiert, bis er mit Form2 fertig ist. Sie möchten die Methode ShowDialog().

0

Mit nativen .NET gibt es keine Möglichkeit, ein Formular an die Spitze zu setzen und es dort zu halten.

Form.TopMost legt das Formular nur bei Erstellung oben fest. Form.ShowDialog() legt das Formular über alle Formulare dieser Anwendung fest, kann dann aber auch hinter andere Anwendungen zurückversetzt werden.

Ich erinnere mich, dass wir einige P/Invoke-Calls zu nativen Win32 verwendet, um diesen Fall zu behandeln, aber nicht daran erinnern, welche Anrufe genau. Wie auch immer, 100% wurden nie erreicht, auf Win2000 zu WinXP verbreitet, nichts hat überall funktioniert.

2

Sie können die Win32 :: SetWindowPos() -Methode verwenden und den HWND hWndInsertAfter auf HWND_TOPMOST setzen, damit er oben bleibt.

Schauen Sie hier für die SetWindowPos Dokumentation: http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

[DllImport("user32.dll")] 
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); 

Hier einige Beispiele: http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html

Verwandte Themen