2013-12-14 96 views
0

在C#或VBNET中如何在運行時將正常的ProgressBar控件(或第三方ProgressBar)放置到statusstrip內的ToolStripProgressBar的確切位置?將正常的ProgressBar放到ToolStripProgressBar的確切位置

我試過這個,但正常的進度移動到左上角和我StatusStrip中是在底部...:

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

而與此事情發生同樣的事情:

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

有了這個正常的進度移動到右下角,其中StatusStrip中不過是大小/位置不準確,我可以看到ToolStripProgressBar1回到正常進度的:

ProgressBar1.Size = ToolStripProgressBar1.ProgressBar.Bounds.Size 
ProgressBar1.Location = ToolStripProgressBar1.ProgressBar.Parent.Bounds.Location 
+0

爲什麼它必須是在運行時?在狀態欄中留出很大的空間(使用固定大小的標籤),在該空間上繪製一個米,將錨定在左側和底部。它不會是狀態欄或內部佈局面板的「成員」,但應通過移動和調整大小來保持原樣。它必須是左邊的任何動態狀態欄的東西雖然 – Plutonix

+0

@Plutonix謝謝 – ElektroStudios

回答

2

我不知道你爲什麼要放置一個控件來覆蓋現有的ToolStripProgressBar,但幸運的是,實現這樣的事情很簡單。您可以通過ProgressBar屬性訪問託管的ProgressBar,正確使用PointToScreen方法獲取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)); 
    }; 
} 
相關問題