2013-12-14 4 views
0

C# 또는 VBNET에서 런타임시 일반 ProgressBar 컨트롤 (또는 타사 ProgressBar)을 statusstrip 내의 ToolStripProgressBar의 정확한 위치에 배치하는 방법은 무엇입니까?일반 ProgressBar을 ToolStripProgressBar의 정확한 위치에 배치하십시오.

나는이 시도했지만, 정상적인 진행 막대의 왼쪽 상단으로 이동 내 statusstrip가 하단에가 ... :

ProgressBar1.Size = ToolStripProgressBar1.ProgressBar.Size 
ProgressBar1.Location = ToolStripProgressBar1.ProgressBar.Location 

그리고이 다른 사람과

는 같은 일을 발생합니다

01 다음 statusstrip이 크기에 불과하다 오른쪽 골대이 정상적인 진행 막대 이동으로
ProgressBar1.Size = ToolStripProgressBar1.ProgressBar.Bounds.Size 
ProgressBar1.Location = ToolStripProgressBar1.ProgressBar.Bounds.Location 

는/위치는 내가 다시 정상 진행 막대의 ToolStripProgressBar1을 볼 수 있습니다, 정확한 아니다

+0

런타임에 표시해야하는 이유는 무엇입니까? 상태 표시 줄에 큰 자리를 남기고 (고정 된 크기의 레이블 사용), 그 공간에 미터를 그리고 앵커를 왼쪽, 아래쪽으로 설정하십시오. 상태 표시 줄 또는 내부 layoutpanel의 '멤버'가 될 수는 없지만 이동 및 크기 조정을 통해 유지되어야합니다. 그래도 동적 상태 표시 줄의 왼쪽에 있어야합니다. – Plutonix

+0

@Plutonix 감사합니다. – ElektroStudios

답변

2

왜 내가 기존 ToolStripProgressBar을 덮기 위해 컨트롤을 배치할지 모르겠지만 다행히도 그런 일을 성취하는 것은 간단합니다. ProgressBar 속성을 통해 ProgressBar 호스트에 액세스하고 PointToScreen 메서드를 올바르게 사용하여 ProgressBar의 화면 좌표 위치를 얻은 다음 해당 위치를 양식 좌표 버전으로 변환하고 다른 ProgressBar에 사용합니다. 외부에서 사용한 ProgressBar의 형식은 Parent이어야합니다.

public Form1(){ 
    InitializeComponent(); 
    //handle the Shown event of your form to ensure 
    //your toolStripProgressBar1 has been rendered correctly with correct location 
    Shown += (s,e) => { 
    //suppose you have a progressbar called progressBar1 
    progressBar1.Location = PointToClient(toolStripProgressBar1.ProgressBar 
               .PointToScreen(Point.Empty)); 
    //do this to cover the whole existing toolStripProgressBar1 exactly 
    progressBar1.Size = toolStripProgressBar1.ProgressBar.Size; 
    //call this to ensure your progressBar1 lies on top of all other controls of 
    //your form (of course your statusStrip should be a control of your form) 
    progressBar1.BringToFront(); 
    }; 
    //We should also handle the SizeChanged event of the form 
    //because when resizing, the location of the toolStripProgressBar (relatively 
    // to the form) will change 
    SizeChanged += (s, e) => { 
    progressBar1.Location = PointToClient(toolStripProgressBar1.ProgressBar 
               .PointToScreen(Point.Empty)); 
    }; 
} 
관련 문제