2016-04-26 2 views
1

Ich möchte, dass ein untergeordnetes Formular über dem Hauptformular angezeigt wird und alle leeren Bereiche umsichtig sind. Ich erreichte das gleiche unter Verwendung der in C# winforms pop up with background faded bereitgestellten Lösung.C# untergeordnetes Formular über Hauptformular mit ausgegrautem Effekt

Jetzt möchte ich das Panel, das in der untergeordneten Form verwendet wird, abgerundete Ecke haben. Irgendeine Hilfe?

Ich benutzte die Platte von unten Link, abgerundete Ecken zu haben. Das Panel hat eine abgerundete Ecke, aber die Rechtecklinie (im Bild hervorgehoben) ist noch sichtbar. Gibt es eine Möglichkeit, es verschwinden zu lassen? http://www.openwinforms.com/creating_cool_gradient_panel_gdi.html

enter image description here

+0

Jetzt ist das schwierig. Das Erstellen von Steuerelementen mit abgerundeten Ecken in Winforms ist nicht schwer, aber es ist schwierig, sie mit einer halbtransparenten Form zu kombinieren. Ich habe das wahrscheinlich auf die falsche Art gelöst, aber als ich so weit war, wurde so viel Code geschrieben, dass ich es nicht ändern konnte. Der richtige Weg ist wahrscheinlich, mit [Hans Passant] (http://stackoverflow.com/users/17034/hans-passant) 's Trick zu beginnen, wie geschrieben in [dieser Antwort] (http://stackoverflow.com/a/10267279/3094533), um den halbtransparenten Hintergrund zu erstellen und dann herauszufinden, wie der Transparenzschlüssel nicht um die Ecken herum angezeigt werden kann. –

+0

Ich habe zur Zeit keine Zeit, eine richtige Antwort zu schreiben, vielleicht könnte jemand anderes helfen. Wo ist Hans, wenn du ihn brauchst? –

+0

Warten auf Ihre Antwort .... – Rocky

Antwort

1

fand ich die Lösung.

auf Vordruckfarbe add:

this.BackColor = Color.Lime; 
     this.TransparencyKey = Color.Lime; 

     var hb = new HatchBrush(HatchStyle.Percent60, this.TransparencyKey); 
     e.Graphics.FillRectangle(hb, this.DisplayRectangle); 

auf Vordruck Last machen die Plattenkante Runde, wo ctrl = Panel.

Rectangle bounds = new Rectangle(0, 0, ctrl.Width, ctrl.Height); 
     int iCornerRadius = 20; 
     GraphicsPath gpath = new GraphicsPath(); 
     gpath.AddArc(bounds.X, bounds.Y, iCornerRadius, iCornerRadius, 180, 90); 
     gpath.AddArc(bounds.X + bounds.Width - iCornerRadius, bounds.Y, iCornerRadius, iCornerRadius, 270, 90); 
     gpath.AddArc(bounds.X + bounds.Width - iCornerRadius, bounds.Y + bounds.Height - iCornerRadius, iCornerRadius, iCornerRadius, 0, 90); 
     gpath.AddArc(bounds.X, bounds.Y + bounds.Height - iCornerRadius, iCornerRadius, iCornerRadius, 90, 90); 
     gpath.CloseAllFigures(); 

     ctrl.Region = new Region(gpath); 
     ctrl.Show(); 
+0

Ich bin froh, dass es funktioniert hat, auch wenn ich nicht die Zeit hatte, meine Lösung zu posten. –

Verwandte Themen