5

我制作了一个 winform,其中包含一个 tabControl(3 个选项卡,以后可能会更多)。

在我的两个标签中,我有一个 listBoxView。

问题是,当我单击 fullSize 按钮时,tabControl 不会改变他的大小。那是一个可怕的窗户。

如何根据 winforms 边框大小定义 tabControl 的动态大小,以及基于 tabControl 大小的 listBoxView 的动态大小?

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 上这样做,因为其中一个元素将占据所有页面。

并且 Anchor 不会调整元素的大小,它只会重新组织它们以适应页面。

仍然没有像这样调整大小:

    // 
    // 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);

但他不会夺回它原来的位置。

谢谢你。

4

1 回答 1

4

只需使用将其设置为的Dock属性。它应该可以解决您的问题。tabControlFill

MSDNDock属性参考

讨论后编辑:要锚定 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)));
于 2013-07-30T09:56:44.497 回答