2016-04-18 42 views
-1

Win32 APIBS_GROUPBOX只是創建一個基本上繪製爲一個組的「按鈕」,它不作爲任何其他控件的容器。WinForms - groupBox在WinApi中

在WinForms中,此概念已更改,GroupBox實際上是一個容器。

我移植一個老Win32應用WinForms,我通過解析Win32 API對話框定義字符串在運行時,對話框的形式產生。一切正常,除了這些groupBoxes,我無法在.NET世界中找到替代品。

我怎樣才能得到一個控制ala Win32 GroupBox不會取得任何所有權作爲.NET GroupBox

THX

+1

綜觀[這](https://msdn.microsoft.com/en-us/library/windows/desktop/bb775947%28v=vs.85%29.aspx)它的確看起來好像它總是意味着包含一組控件,並不是真正的按鈕。那麼__爲什麼不使用GroupBox控件? – TaW

+0

我檢查了那篇文章,它清楚地表明,groupBox主要是爲了創建可視化組。 GroupBox是一個容器,在解析字符串並將控件放入正確的父級時會產生很多問題。 – Eugen

+0

那麼,如果它可以幫助你__can__放置控件__over__而不是__into__ GroupBox;在設計者中,例如通過將其移動到鍵盤和代碼中,只需將它們添加到GB的Controls集合中即可。 – TaW

回答

0

畢竟我通過在.NET中創建一個透明組框解決了這個問題。這是代碼。

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); 
     } 
    }