2016-05-21 4 views
5

Ich arbeite in C#. Ich weiß, dass diese Frage häufig gestellt wird, nur dass ich die obere Leiste immer noch nicht vollständig ausblenden kann. Dies ist das Ergebnis, das ich erhalte, wenn ich die Form-Textzeichenfolge auf "" und controlbox = false setze.Topleiste in Windows Form C kann nicht vollständig ausgeblendet werden #

wollen immer noch den Schatteneffekt:

Still want the shadow effect

So wie Sie die Grenze sehen auf der Seite verschwunden ist (! Groß), und es ist die üblichen Schatten (toll!), Aber die obere Grenze hat diese seltsame weiße Linie, die ich nicht entfernen kann.

Ich möchte nicht die Formularrahmen-Eigenschaft auf "keine" festlegen, wie ich die integrierten umfangreichen Steuerelemente und Formular Schatten genießen, so dass dies keine Option ist. Irgendwelche anderen Vorschläge dafür?

Vielen Dank im Voraus!

(I sollte festgelegt werden, dass die Tasten auf der oberen rechten Seite werden von mir erzeugt und zeigen den Rand meiner editierbare Form. Der weiße Raum über das ist, was ich zu entfernen versuche.)

+0

Haben Sie Folgendes versucht: [Wie erstellt man ein Formular mit einem Rahmen, aber keine Titelleiste? (wie Lautstärkeregelung unter Windows 7)] (http://stackoverflow.com/questions/3594086/how-to-create-a-form-with-a-border-but-no-title-bar-like-volume- control-on-wi) –

+0

@RezaAghaei Ja, ich habe das gelesen, bevor ich das gepostet habe. form.FormBorderStyle = FormBorderStyle.SimalToolWindow; Ich habe das, was ich als Grenze eingestellt habe, aber es sieht immer noch gleich aus. – user3811284

Antwort

0

ich konnte nicht replizieren dies in Windows 7 - ich bekomme ein weißes Quadrat.
(Dies hängt von FormBorderStyle ab - ich setze 'None' darin, um den Rand zu entfernen)
Schritte, die ich gemacht habe:
1. Erstellen Sie eine neue Windows Forms-Anwendung.
2. Klicken Sie auf Formularfenster
3. Eigenschaften->
3.1. FormBorderStyle = None
3.2. ControlBox = Falsch
3.3. Text =
(In Text löschte ich die 'Form1' und ließ es leer)

  1. welches Projekt haben Sie?
    Ich konnte es nicht leicht mit WPF finden, also denke ich, das ist Windows Forms Application.

  2. Welches Betriebssystem verwenden Sie?
    Ich verwende Windows 7, gehört Ihnen Windows 10?

  3. Was ich nicht verstehe, ist, wie Sie die Schaltflächen Minimieren, Maximieren und Schließen auf der rechten Seite haben. ControlNox = false entfernt sie sofort.

+2

Ich verwende Windows 10, vielleicht ist das ein Windows 10-Fehler? Ich habe nicht versucht, mein Programm auf einem Windows 7-Computer auszuführen. Wie ich bereits sagte, möchte ich FormBorderStyle = None nicht verwenden, da ich die Shadow- und Re-Size-Optionen für mein Formular benötige. Die Schaltflächen Minimieren, Maximieren und Schließen sind Schaltflächen, die ich selbst erstellt habe (nicht Kontrollkästchen). – user3811284

+0

Sie sagten, Sie wollten diesen dünnen weißen Raum entfernen? Oder die ganze graue Fläche, auf der die Knöpfe sind? –

+0

Ori Nachum, nur der dünne weiße Raum! – user3811284

1

Ich hatte dasselbe Problem auf 10 Windows-

public const int WM_NCCALCSIZE = 0x0083; 


    private struct RECT 
    { 
     public int Left; 
     public int Top; 
     public int Right; 
     public int Bottom; 
    } 

NCCALCSIZE_PARAMS structure

enthält Informationen, die eine Anwendung verwenden kann, während die WM_NCCALCSIZE Nachricht verarbeiten, die Größe, Position und gültige Inhalte zu berechnen des Clientbereichs eines Fensters.

struct NCCALCSIZE_PARAMS 
    { 
     public RECT rgrc0, rgrc1, rgrc2; 
     public IntPtr lppos; 
    } 

WM_NCCALCSIZE message

gesendet, wenn die Größe und Position des Client-Bereichs des Fensters berechnet werden. Durch die Verarbeitung dieser Nachricht kann eine Anwendung den Inhalt des Clientbereichs des Fensters steuern, wenn sich die Größe oder Position des Fensters ändert.

Ein Fenster empfängt diese Nachricht über seine WindowProc-Funktion.

protected override void WndProc(ref Message m) 
    { 

     switch (m.Msg) 
     { 

      case WM_NCCALCSIZE: 
       { 
        NCCALCSIZE_PARAMS csp; 

        csp = (NCCALCSIZE_PARAMS)Marshal.PtrToStructure(m.LParam, 
        typeof(NCCALCSIZE_PARAMS)); 
        csp.rgrc0.Top = csp.rgrc0.Top - 3; 
        Marshal.StructureToPtr(csp, m.LParam, false); 
       } 
       break; 
     } 
    } 

und weißer Raum auf der Oberseite weg.

Verwandte Themen