2010-08-29 13 views

Odpowiedz

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

za ustaloną rozmiar okna, nadal powinieneś używać FormBorderStyle.SizableToolWindow, ale możesz zastąpić formularz WndProc, aby zignorować testy trafień bez klientów (które są używane do przełączania kursorów zmiany rozmiaru):

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

    if (message.Msg == WM_NCHITTEST) 
     return; 

    base.WndProc(ref message); 
} 

Jeśli chcesz naprawdę wymusić rozmiar, można także ustawić MinimumSize równą MaximumSize na formularzu.

+0

Nie, to usuwa granica całkowicie –

+0

@ oɔɯǝɹ: form.FormBorderStyle = FormBorderStyle.SizableToolWindow wydaje się działać prawidłowo dla mnie. –

+0

@ oɔɯǝɹ: 'FixedToolWindow' usuwa granicę 3D. Zobacz moją zaktualizowaną odpowiedź, aby uzyskać zachowanie o stałym rozmiarze z nienaruszoną krawędzią 3D. –

0

form.FormBorderStyle = FormBorderStyle.Fixed3D;

+0

Chociaż ten kod może pomóc w rozwiązaniu problemu, podanie dodatkowego kontekstu dotyczącego tego, dlaczego i/lub odpowiedź na to pytanie, znacznie poprawiłoby jego długoterminową wartość. Edytuj odpowiedź, aby dodać wyjaśnienie. –

1

Ponieważ "Ta zmiana miała na celu zaadresowanie autora postu i nie ma sensu jako zmiana, powinna być napisana jako komentarz lub odpowiedź." Przedstawiam edycję odpowiedzi Chrisa jako nową odpowiedź.

Kod jego odpowiedź działa zgodnie z opisem - oprócz tego, że zapobiega również wystąpieniu zdarzenia myszy obszaru roboczego. Aby to naprawić, musisz zwrócić 1 (tak jak w HTCLIENT).

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); 
} 
Powiązane problemy