2017-01-05 101 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,我没有说要做一个新项目。我说“给你的项目添加一个新的类”。工程菜单 - >添加类。 –