2010-05-04 6 views
15

테이블 레이아웃 아웃 패널이 있습니다. 2x2 - 2 열 2 행.프로그래밍 방식으로 행/열 범위 변경 (tablelayoutpanel)

예를 들어, 1 행 2 열에 버튼 1 버튼을 추가했습니다. button1의 도킹 속성이 채우기로 설정되어 있습니다. VS 디자이너는 button1의 열/행 범위 속성을 설정할 수 있습니다.

는 I는 가용성 button1을, 프로그램 행 범위 특성을 변경하려면, 그래서 다시 설정하는 모든 두 번째 열 (1 열과 제 2 열)과 가용성을 채울 수있다.

어떻게?

답변

25

이 코드는 어떻게됩니까?

private void button1_Click(object sender, EventArgs e) 
{ 
    var control = sender as Control; 

    if(control == null) 
     return; 

    if (1 == tableLayoutPanel1.GetRowSpan(control)) 
    { 
     tableLayoutPanel1.SetRowSpan(control, 2); 
    } 
    else 
    { 
     tableLayoutPanel1.SetRowSpan(control, 1); 
    } 
} 
+1

위대한 코드입니다. Visual Studio Designer가 나를 오도합니다. 나는 button1 속성을 찾고 있었고, button1을 toolstippanel 항목으로 변환하려고 시도 했었습니다. –

+0

비주얼 디자이너 대신 Form.Designer.cs를 살펴본 경우 솔루션을 직접 찾을 수있었습니다. ;-) – Oliver

+1

나는 그것이 오래된 게시물 인 것을 알고있다. 그러나 C#에서 "yoda 조건"을 수행 할 필요가 없다는 것을 지적하고 싶다. (그리고 만약 여러분이 boolean을 사용하여 실수를하고 비교 대신에 할당을한다면, 다른 타입으로 생성하는 에러와는 반대로 컴파일러 경고를 생성한다고 믿습니다.) – MiffTheFox

2

현재의 투표 결과가 매우 적절하다고 생각되지만, 필요한 것보다 약간 난해하게 보입니다. 속성을 설정하기 전에 컨트롤을 tableLayoutPanel에 추가해야합니다.

Visual Studio (2013 및 가능성있는 다른 버전)는 이러한 속성을 컨트롤의 일부로 표시합니다. 실제로는 tableLayoutPanel의 일부입니다.

설명 :

tableLayoutPanel.Controls.Add(**control**, x, y) 
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span') 

예 :

tableLayoutPanel1.Controls.Add(**button1**, 0, 0); 
tableLayoutPanel1.SetColumnSpan(**button1**, 2); 
tableLayoutPanel1.SetRowSpan(**button1**, 3); 

결과 :이 공간을 '점유'A 버튼. (아직도 '커버'의 공간, 그것은 것 '예비'그것이 할지라도. 지역을 커버하기에 충분한 크기를 제공한다.)

O O X X X 
O O X X X 
O O X X X 
X X X X X 
X X X X X 

것이다 그리드의 크기보다 스팬 더 큰 설정. . : 그리드 크기를 변경하지 마십시오. 그리드의 크기에 맞게 숫자를 자르거나 편집하지 마십시오. 컴파일시 오류가 발생하지 않습니다.

스팬이 현재 격자 (tableLayoutPanel) 최대 크기로 설정된 것처럼 작동/수행합니다. 이는 TLP/격자 크기가 변경된 경우에만 관련이 있습니다.

두 개의 컨트롤을 동일한 그리드 위치에 프로그래밍 방식으로 추가하면 그리드의 첫 번째 컨트롤이 해당 위치를 유지합니다. 이후에 추가 된 컨트롤은 다음 셀 블록으로 푸시됩니다. '스팬'이 추가되면 사용 된 셀 블록을 처리하고 사용하지 않는 셀 블록을 계속 검색합니다.

예는 : LABEL1, 라벨 2LABEL3은 0,0에 추가됩니다.

  • LABEL1 0,0
  • 라벨 2에 나타난다 : 0,1
  • 을 LABEL3 : 0,2

예 2 : 라벨 1 행 간격을 가지고 2.

  • LABEL1는 : 0,0
  • 라벨 2 : 더 후 0.3 올바른 격자 점과 스팬을 선택한 후

을 수행 할 수 있습니다 : 0,2

  • LABEL3로 이전 도킹 및 앵커 속성을 사용하여 레이아웃을 최적화하십시오.

  • 관련 문제