none
Abgerundete Windows Forms RRS feed

  • Frage

  • Hey,

    kann mir einer eine konkrete Methode sagen, wie man abgerundete Forms in Visual Studio 2013 hinbekommt?

    • 99% aller Ergebnisse in Google sind zu VB, die irgendwie anders sind..
    • Und habe etwas mit PowerPack usw gelesen, welches auf MSDN teilweise extrem schlecht erklärt wird (zumindest für einen Anfänger) 

    Muss ich diese PowerPack Methode verwenden? 

    PS: Ich will zB sowas hier machen:

    http://imgur.com/XTWMfp5 

    Gruß

    Montag, 26. Januar 2015 19:39

Antworten

  • Hallo,
    viele Möglichkeiten hast du unter WinForms nicht. Zumindest wird eine Rundung immer leicht verpixelt aussehen. Grundsätzlich könntest du es beispielsweise so machen:

    private void Form1_Load(object sender, EventArgs e)
    {
        //Die Einstellungen für die Form lassen sich auch direkt im Eigenschaftenfenster treffen
        this.FormBorderStyle = FormBorderStyle.None;
    
        this.TransparencyKey = this.BackColor = Color.Fuchsia;//Den Formhintergrund voll transparent machen - alles was nun die Farbe Fuchsia hat, wird transparent
    }
    
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        //Selbst den Forumhintergrund zeichnen
        e.Graphics.FillEllipse(Brushes.LightBlue, 0, 0, 20, 20);
        e.Graphics.FillEllipse(Brushes.LightBlue, this.ClientSize.Width - 20, 0, 20, 20);
        e.Graphics.FillEllipse(Brushes.LightBlue, this.ClientSize.Width - 20, this.ClientSize.Height - 20, 20, 20);
        e.Graphics.FillEllipse(Brushes.LightBlue, 0, this.ClientSize.Height - 20, 20, 20);
        e.Graphics.FillRectangle(Brushes.LightBlue, 10, 0, this.ClientSize.Width - 20, this.ClientSize.Height);
        e.Graphics.FillRectangle(Brushes.LightBlue, 0, 10, this.ClientSize.Width, this.ClientSize.Height - 20);
    }

    Die beiden Ereignisse kannst du im Designer abonnieren. markiere hierfür die Form, drücke F4 und wechsle in die Ereignis-Ansicht (Blitz-Button) und mache jeweils einen Doppelklick in die Leere Combobox um das jeweilige Event zu abonnieren.

    Es gibt noch einige Andere Varianten, wo man Beispielsweise direkt die Form zuschneiden kann. Aber keine der Varianten wird wirklich besser.

    Wenn du ein hochwertiges Design erzielen willst, empfehle ich dir auf WPF umzusteigen. Dort hast du deutlich mehr Möglichkeiten.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 26. Januar 2015 20:49
    Moderator

Alle Antworten

  • Hallo,
    viele Möglichkeiten hast du unter WinForms nicht. Zumindest wird eine Rundung immer leicht verpixelt aussehen. Grundsätzlich könntest du es beispielsweise so machen:

    private void Form1_Load(object sender, EventArgs e)
    {
        //Die Einstellungen für die Form lassen sich auch direkt im Eigenschaftenfenster treffen
        this.FormBorderStyle = FormBorderStyle.None;
    
        this.TransparencyKey = this.BackColor = Color.Fuchsia;//Den Formhintergrund voll transparent machen - alles was nun die Farbe Fuchsia hat, wird transparent
    }
    
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        //Selbst den Forumhintergrund zeichnen
        e.Graphics.FillEllipse(Brushes.LightBlue, 0, 0, 20, 20);
        e.Graphics.FillEllipse(Brushes.LightBlue, this.ClientSize.Width - 20, 0, 20, 20);
        e.Graphics.FillEllipse(Brushes.LightBlue, this.ClientSize.Width - 20, this.ClientSize.Height - 20, 20, 20);
        e.Graphics.FillEllipse(Brushes.LightBlue, 0, this.ClientSize.Height - 20, 20, 20);
        e.Graphics.FillRectangle(Brushes.LightBlue, 10, 0, this.ClientSize.Width - 20, this.ClientSize.Height);
        e.Graphics.FillRectangle(Brushes.LightBlue, 0, 10, this.ClientSize.Width, this.ClientSize.Height - 20);
    }

    Die beiden Ereignisse kannst du im Designer abonnieren. markiere hierfür die Form, drücke F4 und wechsle in die Ereignis-Ansicht (Blitz-Button) und mache jeweils einen Doppelklick in die Leere Combobox um das jeweilige Event zu abonnieren.

    Es gibt noch einige Andere Varianten, wo man Beispielsweise direkt die Form zuschneiden kann. Aber keine der Varianten wird wirklich besser.

    Wenn du ein hochwertiges Design erzielen willst, empfehle ich dir auf WPF umzusteigen. Dort hast du deutlich mehr Möglichkeiten.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 26. Januar 2015 20:49
    Moderator
  • Hallo,

    das Fenster selbst kannst du nicht abrunden, da dies vom System abhängt. Du kannst aber das Fenster ohne Rahmen zeichnen (FormBorderStyle), um dann keine Hintergrundfarbe zu setzen und direkt in das Fenster ein Rechtekc mit abgerundeten Ecken zu zeichnen.


    © 2015 Thomas Roskop

    Germany // Deutschland

    Montag, 26. Januar 2015 20:49
  • Hey,

    wie meinst du das mit "keine Hintergrundfarbe? Es ist doch auf "Control" kann ich das wegmachen?

    Montag, 26. Januar 2015 22:59
  • Schau dir dazu Koopakillers Antwort an, 

    du musst den normalen Fesnterhintergrund entfernen, denn sonst gäbe es immernoch einen rechteckigen Weißen "Fensterrahmen".

    Wie meinst du das mit "auf Control"? Natürlich arbeitest du mit irgendwelchen Controls im Fenster, aber du kannst ja wohl auch das Fenster direkt bearbeiten?!

    Und PS (wie Koopakiller auch bereits meinte) - für gutes Design und anpassbarkeit, verwende doch lieber WPF!


    © 2015 Thomas Roskop

    Germany // Deutschland


    Dienstag, 27. Januar 2015 05:50
  • Hallo zusammen,

    Thomas Roskop wrote in
    news:efad7acc-ab87-4e01-8bee-0ad92eddbe40@communitybridge.codeplex.com:

    das Fenster selbst kannst du nicht abrunden, da dies vom System
    abhängt.

    stimmt nicht ganz...
    Man kann auch Alpha-Blend-Fenster 'bauen', die können (auch ohne verpixelte Kanten) beliebige Formen annehmen.

    Sehr gutes Beispiel:
    http://www.codeproject.com/Articles/1822/Per-Pixel-Alpha-Blend-in-C

    Auf diesen Fenstern kann man aber keine Controls einfügen, die muss man schon selber 'drauf malen' und Positionen und Clicks selber auswerten.

    Ciao,
    Georg

    Dienstag, 27. Januar 2015 12:24