2010-08-29 17 views

Antwort

32
form.Text = string.Empty; 
form.ControlBox = false; 
form.FormBorderStyle = FormBorderStyle.SizableToolWindow; 

Für eine feste Größenfenster sollten Sie immer noch FormBorderStyle.SizableToolWindow verwenden, aber Sie können die WndProc des Formulars überschreiben, um Nicht-Client-Treffertests zu ignorieren (die zum Wechseln zu den Größencursors verwendet werden):

protected override void WndProc(ref Message message) 
{ 
    const int WM_NCHITTEST = 0x0084; 

    if (message.Msg == WM_NCHITTEST) 
     return; 

    base.WndProc(ref message); 
} 

Wenn Sie wirklich wollen, um die Größe erzwingen, könnten Sie setzen auch MinimumSize gleich MaximumSize auf dem Formular.

+0

Nö, das entfernt die Grenze vollständig –

+0

@ oɔɯǝɹ: form.FormBorderStyle = FormBorderStyle.SizableToolWindow scheint mir richtig zu arbeiten. –

+0

@ oɔɯǝɹ: 'FixedToolWindow' entfernt den 3D-Rahmen. Sehen Sie meine aktualisierte Antwort, um ein festes Größenverhalten mit intakter 3D-Grenze zu erhalten. –

0

form.FormBorderStyle = FormBorderStyle.Fixed3D;

+0

Obwohl dieser Code helfen kann, das Problem zu lösen, würde die Bereitstellung eines zusätzlichen Kontexts bezüglich der Frage, warum und/oder wie er die Frage beantwortet, seinen langfristigen Wert signifikant verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

1

Seit "Diese Bearbeitung sollte den Autor des Beitrags adressieren und macht keinen Sinn als Bearbeitung. Es hätte als Kommentar oder Antwort geschrieben werden sollen." Ich präsentiere einen Schnitt zu Chris 'Antwort als neue Antwort.

Der Code seine Antwort funktioniert wie beschrieben - außer dass es auch verhindert, dass Client-Bereich Mausereignis auftreten. Sie müssen 1 (wie in HTCLIENT) zurückgeben, um das zu beheben.

protected override void WndProc(ref Message message) 
{ 
    const int WM_NCHITTEST = 0x0084; 
    const int HTCLIENT = 0x01; 

    if (message.Msg == WM_NCHITTEST) 
    { 
     message.Result = new IntPtr(HTCLIENT); 
     return; 
    } 

    base.WndProc(ref message); 
} 
Verwandte Themen