2017-01-05 100 views
0

我有一個按鈕可以動態地將最多24個標籤添加到窗體中。問題是他們的位置。使FlowLayoutPanel具有透明背景

我想到,而不是手動設置每個特定的位置,我可以讓他們自動排列像FlowLayoutPanel一樣。但FLP將處於最佳狀態,並隱藏其下的控制。並且發回它更糟糕。所以我想把它放在前面,但保持透明,這樣它就不會隱藏它下面的其他控件。

任何建議將很好

謝謝。

+0

'FlowLayoutPanel'並不神奇。當你使用它時,你不必指定每個子控件的'Location',因爲它包含自己計算它們的代碼。如果你使用'Panel',那麼它就不會包含這樣的代碼,所以你必須自己計算它們。這是沒有辦法的。您可以繼承'Panel'並封裝該代碼,但您仍然需要以這種或那種方式編寫代碼。 – jmcilhinney

+0

@ jmcilhinney - 好的,我會編輯我的文章,讓事情更清楚。 (方式更清晰...) – TGamer

+0

如果有必要,我會發布我的設計的屏幕截圖 – TGamer

回答

1

我可以讓它們像FlowLayoutPanel一樣自動排列。 但我不能使用一個,因爲它會在上面,並隱藏我的圖片 中的圖像。

那麼,你可以使用帶透明背景的FlowLayoutPanel,這樣它就不會隱藏你擁有的其他控件。怎麼做?那麼,this answer告訴你如何使透明Panel。你應該能夠很容易地調整其與FlowLayoutPanel使用像這樣的工作:

Public Class TransparentFLP 
    Inherits FlowLayoutPanel 

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams 
     Get 
      Dim cp As CreateParams = MyBase.CreateParams 
      cp.ExStyle = cp.ExStyle Or &H20 ''#WS_EX_TRANSPARENT 
      Return cp 
     End Get 
    End Property 
    Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs) 
     ''#MyBase.OnPaintBackground(e) --> Don't uncomment this orelse 
              'it will cause the BackColor to be redrawn. 
    End Sub 

End Class 
  • 添加新Class到您的項目。
  • 將上面的代碼粘貼到其中。
  • 重建您的項目。
  • 將新控件從工具箱頂部放到窗體上(而不是使用原始的FlowLayoutPanel)。
  • 你很好走。

P.S.我不確定是否使用了4個面板,但您可以考慮使用TableLayoutPanel代替。

希望能幫到:)

+0

所以你說我已經讓我的項目再次?通過複製+粘貼?爲什麼我不能將你的代碼添加到我的? – TGamer

+0

大概把它放在我的公開課上。那個怎麼樣? – TGamer

+0

@TGamer,我沒有說要做一個新項目。我說「給你的項目添加一個新的類」。工程菜單 - >添加類。 –