2015-01-20 1 views
2

가변 길이 텍스트와 그 아래에 progressBar가있는 레이블이 있습니다. 해당 레이블과 progressBar 사이에 공백을두기를 원하므로 레이블의 텍스트 (줄 바꿈 됨)에 따라 progressBar를 아래로 밀어 내서 항상 간격을 유지해야합니다. 어떻게해야합니까? AutoSize = trueAutoSizeMode = GrowAndShrink을 시도했지만 아무 것도 변경하지 않았습니다. 예 :컨트롤을 아래로 내림차순하는 방법

--------------------------- 
| for example the label's | 
| text might be something | 
| like this, with a lot of | 
| of text but the progress | 
| bar should be here  | 
|       | 
| progressBar here   | 
--------------------------- 

예 2 :

--------------------------- 
| small text    | 
|       | 
| progressBar here   | 
--------------------------- 

답변

5

FlowDirection 속성이 TopDown으로 설정된 FlowLayoutPanel에 레이블과 ProgressBar를 넣습니다. 이제 Label이 수직으로 커지면 ProgressBar가 자동으로 푸시 다운됩니다. 레이블과 ProgressBar 사이의 거리를 제어하려면 Padding 레이블의 Bottom 값을 변경하십시오.

여기 양식과 FlowLayoutPanel에 trueAutoSize 세트를 몇 번 버튼을 눌렀을 후 (GrowOnly를 사용하여 AutoSizeMode에)처럼 내 양식이 어떻게 표시되는지를 보여줍니다 :

enter image description here

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     for(int i = 1 ; i < 20; i++) 
     { 
      label1.Text = label1.Text + " more "; 
     } 
    } 
} 
+0

최고 아니었다 인식 Winforms에는 FlowLayoutPanel이 있습니다. –

+0

여기에서 재현 할 수 없습니다. 여기에 내 양식 http://oi60.tinypic.com/xoqdmq.jpg가 있으며 버튼을 두 번 누른 다음 양식이 다음과 같이 보입니다. http://oi62.tinypic.com/v49i52.jpg'FlowDirection = TopDown' 및 양식의 'AutoSize = true'. 내가 뭘 놓치고 있니? – Jack

+0

또한'GrowOnly = AutoSizeMode'하지만 기본값입니다. – Jack

1

당신의 label.text을 설정합니다. 다음

progessBar.Top = label.Bottom + WhateverSpaceYouWant 
2

당신이 당신의 ProgressBar의 초기 Y 위치를 저장하면 레이블의 높이에 따라 위치 나중에 동적으로 설정할 수 있습니다. 원래 설정된 패딩을 유지합니다.

그래서 다음과 같은 형식으로 버튼을 누르면 라벨이 자동으로 업데이트되는 형태로 버튼 클릭 이벤트에서 진행률 막대 위치를 업데이트 할 수 있습니다. 레이블이 텍스트로 시작하면

enter image description here

, 당신은에서 원래 라벨 높이를 뺄 필요가 있습니다 : 몇 가지 버튼을 클릭 한 후 다음과 같은 결과를 제공

enter image description here

public partial class Form1 : Form 
{ 
    private readonly int initialProgressbarLocationY; 

    public Form1() 
    { 
     InitializeComponent(); 

     label1.MaximumSize = new Size(80, 1000); //Wrapping label 
     label1.AutoSize = true; 

     initialProgressbarLocationY = progressBar1.Location.Y; //Save the original position 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     label1.Text += "bla blablablabla bla"; 
     MoveProgressbar(); 
    } 

    private void MoveProgressbar() 
    { 
     // Set the progressbar at the same X, but update the Y according to the label's height 
     progressBar1.Location = new Point(progressBar1.Location.X, 
      initialProgressbarLocationY + label1.Height); 
    } 
} 

새 Y 또는 패딩이 처음으로 약간 증가합니다.

관련 문제