2017-01-05 12 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. 네 패널의 사용에 대해서는 잘 모르겠지만 대신 TableLayoutPanel을 사용해보십시오.

도움이 되길 바랍니다.

+0

그래서 다시 프로젝트를 만들었다는 말입니까? 복사 + 붙여 넣기로? 왜 내 코드를 추가 할 수 없습니까? – TGamer

+0

아마도 내 공공 수업에 넣으십시오. 어떻게에 대한? – TGamer

+0

@TGamer, 나는 새 프로젝트를 만들지 않았다. 나는 "당신의 프로젝트에 새로운 클래스 추가"라고 말했다. 프로젝트 메뉴 -> 클래스 추가. –