2013-07-30 4 views
3

У меня есть winform, который содержит tabControl (3 вкладки, возможно, более поздние).Winforms Dynamic size

В 2 моих вкладках у меня есть listBoxView.

Проблема в том, что когда я нажимаю кнопку fullSize, tabControl не меняет свой размер. Это ужасное окно.

Как определить динамический размер моего tabControl на основе размера границы winforms и динамического размера моего listBoxView на основе размера tabControl?

TabControl должен адаптироваться к размеру формы, затем страницы в tabControl должны адаптироваться к размеру tabControl, а затем listBox на страницах должен адаптироваться к размеру своих страниц.

Вот форма:

// 
    // Form1 
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); 
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
    this.ClientSize = new System.Drawing.Size(1313, 614); 
    this.Controls.Add(this.tabControl1); 
    this.tabControl1.ResumeLayout(false); 
    this.tabPage1.ResumeLayout(false); 
    this.tabPage1.PerformLayout(); 
    ((System.ComponentModel.ISupportInitialize)(this.dgCSV)).EndInit(); 
    this.tabPage2.ResumeLayout(false); 
    this.tabPage2.PerformLayout(); 
    this.ResumeLayout(false); 

И TabControl с одним из его страниц:

// 
     // tabControl1 
     // 
     this.tabControl1.Controls.Add(this.tabPage1); 
     this.tabControl1.Controls.Add(this.tabPage2); 
     this.tabControl1.Controls.Add(this.tabPage3); 
     this.tabControl1.Location = new System.Drawing.Point(13, 13); 
     this.tabControl1.Name = "tabControl1"; 
     this.tabControl1.SelectedIndex = 0; 
     this.tabControl1.Size = new System.Drawing.Size(1288, 589); 
     this.tabControl1.TabIndex = 0; 
    // 
    // tabPage2 
    // 
    this.tabPage2.Controls.Add(this.listBoxFiles); 
    this.tabPage2.Controls.Add(this.richTextBox1); 
    this.tabPage2.Controls.Add(this.buttonBottom); 
    this.tabPage2.Controls.Add(this.buttonFront); 
    this.tabPage2.Controls.Add(this.buttonDown); 
    this.tabPage2.Controls.Add(this.buttonUp); 
    this.tabPage2.Controls.Add(this.label2); 
    this.tabPage2.Location = new System.Drawing.Point(4, 25); 
    this.tabPage2.Name = "tabPage2"; 
    this.tabPage2.Padding = new System.Windows.Forms.Padding(3); 
    this.tabPage2.Size = new System.Drawing.Size(1280, 560); 
    this.tabPage2.TabIndex = 1; 
    this.tabPage2.UseVisualStyleBackColor = true; 

Я попытался с Parent.width, ClientRectangle, ClientSize.

Я потерял со всеми этими свойствами, и никто не успешен ...

После trippino ответа:

Действительно, док на TabControl будет изменять размеры его, но я не могу сделайте это в listBoxView, потому что один из элементов просто займет всю страницу.

И Якорь не изменяет размер элементов, он будет просто реорганизовать их, чтобы они поместились на странице.

Еще не изменение размера, как это:

// 
    // tabControl1 
    // 
    this.tabControl1.Controls.Add(this.tabPage1); 
    this.tabControl1.Controls.Add(this.tabPage2); 
    this.tabControl1.Controls.Add(this.tabPage3); 
    this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; 
    this.tabControl1.Location = new System.Drawing.Point(0, 0); 
    this.tabControl1.Name = "tabControl1"; 
    this.tabControl1.SelectedIndex = 0; 
    this.tabControl1.Size = new System.Drawing.Size(1313, 614); 
    this.tabControl1.TabIndex = 0; 

    // 
    // listBoxFiles 
    // 
    this.listBoxFiles.Anchor = System.Windows.Forms.AnchorStyles.Right; 
    this.listBoxFiles.Anchor = System.Windows.Forms.AnchorStyles.Top; 
    this.listBoxFiles.Anchor = System.Windows.Forms.AnchorStyles.Bottom; 
    this.listBoxFiles.Anchor = System.Windows.Forms.AnchorStyles.Left; 
    this.listBoxFiles.FormattingEnabled = true; 
    this.listBoxFiles.ItemHeight = 16; 
    this.listBoxFiles.Location = new System.Drawing.Point(185, 43); 
    this.listBoxFiles.Name = "listBoxFiles"; 
    this.listBoxFiles.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; 
    this.listBoxFiles.Size = new System.Drawing.Size(1040, 244); 
    this.listBoxFiles.TabIndex = 42; 



private void tabPage2_SizeChanged(object sender, EventArgs e) 
{ 
    this.buttonAucun.Location = new System.Drawing.Point(this.buttonAucun.Location.X, this.listBoxFiles.Location.Y + this.listBoxFiles.Height + 10); 
    this.progressBar1.Location = new System.Drawing.Point(this.progressBar1.Location.X, this.buttonAucun.Location.Y + this.buttonAucun.Height + 10); 
    this.richTextBox1.Location = new System.Drawing.Point(this.richTextBox1.Location.X, this.progressBar1.Location.Y + this.progressBar1.Height + 10); 
    this.buttonEnregistrer.Location = new System.Drawing.Point(this.buttonEnregistrer.Location.X, this.richTextBox1.Location.Y + this.richTextBox1.Height + 10); 

    } 

Поскольку buttonEnregistrer находится на дне моего TabPage, я также пытался:

this.buttonEnregistrer.Location = new System.Drawing.Point(this.buttonEnregistrer.Location.X, this.tabPage2.Height -50); 

Но его не будет пересдать его исходное местоположение.

спасибо.

+0

вы решили? –

+0

Нет, когда у меня есть 4-сторонняя привязка ко всем моим элементам или только в моем списке, мой список будет скрывать все остальные элементы. Как я могу установить местоположение, например «location (50, listboxiew.bottom.Location.y -10). Это пример, я не знаю, существует ли он. Итак, для моментов у меня есть только 3 стороны Anchor (слева , top, right) .Таким образом, ширина больше. Это начало. –

+0

Вы можете установить myControl.Location = new Point (X, Y), если хотите.Я предлагаю вам изменить размер вашей формы непосредственно в дизайнере, чтобы увидеть поведение якорей. –

ответ

3

Просто используйте свойство DocktabControl, установив его на Fill. Он должен решить вашу проблему.

MSDN Dock Property reference

EDIT ПОСЛЕ ОБСУЖДЕНИЯ: на якорь 4 стороны вы должны использовать:

this.listBoxFiles.Anchor = ((System.Windows.Forms.AnchorStyles 
      ((((System.Windows.Forms.AnchorStyles.Top 
      | System.Windows.Forms.AnchorStyles.Bottom) 
      | System.Windows.Forms.AnchorStyles.Left) 
      | System.Windows.Forms.AnchorStyles.Right))); 
+0

Хорошо. Это работает для tabControl, но как насчет listBoxFiles? Я должен сделать это вручную с помощью (this.tabControl.width - value)? –

+0

Вы можете использовать то же самое и для списков. Попробуйте также свойство привязки, которое может быть очень полезно для ваших целей. –

+0

Я могу использовать Dock в своем спискеBox только в том случае, если это единственный элемент на страницах, потому что он займет всю страницу. И Anchor будет только реорганизовывать позиции моих элементов, это не приведет к переназначению моего списка. –