2016-04-18 15 views
-1

In Win32 API die BS_GROUPBOX erstellt nur einen "Button", der im Grunde als eine Gruppe gemalt ist, dient es nicht als Container für eine andere Kontrolle.WinForms - groupBox wie in WinApi

In WinForms wurde dieses Konzept geändert und GroupBox ist eigentlich ein Container.

Ich portiere eine alte Win32 App zu WinForms, wo ich bei Laufzeitdialogfeldern durch Analysieren einer Win32 API Dialogdefinitionsstring generieren. Alles funktioniert gut, außer diesen groupBoxen, für die ich in der .NET-Welt keine Alternative finde.

Wie bekomme ich eine Kontrolle ala Win32 GroupBox, die keine Eigentumsrechte als die .NET GroupBox übernimmt?

Thx

+1

Mit Blick auf [diese] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb775947%28v=vs.85%29.aspx) ist es sicherlich so aussehen, wenn Es sollte immer Steuerelemente enthalten und funktioniert nicht wirklich als Schaltfläche. Also __why nicht__ das GroupBox-Steuerelement verwenden? – TaW

+0

Ich habe diesen Artikel überprüft, und es wird klar gesagt, dass groupBox hauptsächlich nur visuelle Gruppen erstellen soll. Die GroupBox ist ein Container, der beim Analysieren der Zeichenfolge und beim Platzieren des Steuerelements im richtigen Elternelement viele Probleme verursacht. – Eugen

+0

Nun, wenn es Ihnen hilft __can__ Steuerelemente __over__ statt __into__ eine GroupBox platzieren; im Designer zum Beispiel, indem Sie es mit der Tastatur und im Code bewegen, indem Sie sie einfach nicht zur Controls-Sammlung von GB hinzufügen. – TaW

Antwort

0

Schließlich löste ich das Problem durch eine transparente GroupBox in .NET zu erstellen. Hier ist der Code.

public sealed class IGTransparentGroupBox : GroupBox 
    { 
     public IGTransparentGroupBox() 
     { 
      SetStyle(ControlStyles.SupportsTransparentBackColor, true); 
      SetStyle(ControlStyles.Opaque, true); 
      BackColor = Color.Transparent; 
     } 

     protected override CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams cp = base.CreateParams; 
       cp.ExStyle = cp.ExStyle | 0x20; 
       return cp; 
      } 
     } 

     protected override void OnBackColorChanged(EventArgs e) 
     { 
      Parent?.Invalidate(Bounds, true); 
      base.OnBackColorChanged(e); 
     } 

     protected override void OnParentBackColorChanged(EventArgs e) 
     { 
      Invalidate(); 
      base.OnParentBackColorChanged(e); 
     } 
    }