2013-12-14 6 views
0

В C# или VBNET. Как я могу разместить во время выполнения обычный элемент управления ProgressBar (или сторонний ProgressBar) для точного местоположения ToolStripProgressBar внутри statusstrip?Поместите обычный ProgressBar в точное местоположение ToolStripProgressBar

Я попытался это, но нормальные ProgressBar перемещается в левый верхний угол, и мой StatusStrip находится в нижней части ...:

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

И с этим еще происходит то же самое:

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

с этим нормальным Progressbar перемещается в нижний угол, где StatusStrip есть, но размер/расположение не является точным, я могу видеть ToolStripProgressBar1 назад нормального ProgressBar:

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

Почему это должно быть во время выполнения? Оставьте большое пространство в строке состояния (используйте метку фиксированного размера), нарисуйте метр над этим пространством, установите якорь слева, снизу. Он не будет «членом» строки состояния или внутренней компоновки макета, но должен оставаться на месте через перемещение и изменение размера. Это должно быть для LEFT любых динамических баров состояния, хотя – 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)); 
    }; 
} 
Смежные вопросы