1

我有一个winforms应用程序。在我的应用程序中,我有一个以编程方式加载的用户控件。

在这个用户控件中,我有一个树视图,它也将以编程方式加载项目。我的问题是我想让我的树视图占据其父级的整个大小。

我尝试过
将用户控件Dock属性设置DockStyle.Fill为使其具有其父级的大小。
我对树视图Dock属性做了同样的事情;将其设置为DockStyle.Fill.

我得到
了什么用户控件按预期采用全尺寸,树视图看起来像是隐藏的。我检查了高度,我注意到它是0. 当我试图改变高度时,DockStyle.Fill我不能,它变回0.

有任何想法吗?
更新
树视图的自动生成代码:

private void InitializeComponent()
{
    this.btnAddServer = new System.Windows.Forms.Button();
    this.pnlServersContainer = new System.Windows.Forms.FlowLayoutPanel();
    this.treeViewServers = new System.Windows.Forms.TreeView();
    this.pnlServersContainer.SuspendLayout();
    this.SuspendLayout();
    // 
    // btnAddServer
    // 
    this.btnAddServer.Location = new System.Drawing.Point(89, 478);
    this.btnAddServer.Name = "btnAddServer";
    this.btnAddServer.Size = new System.Drawing.Size(107, 23);
    this.btnAddServer.TabIndex = 3;
    this.btnAddServer.Text = "Add New Server";
    this.btnAddServer.UseVisualStyleBackColor = true;
    this.btnAddServer.Click += new System.EventHandler(this.btnAddServer_Click);
    // 
    // pnlServersContainer
    // 
    this.pnlServersContainer.AutoScroll = true;
    this.pnlServersContainer.Controls.Add(this.treeViewServers);
    this.pnlServersContainer.Dock = System.Windows.Forms.DockStyle.Fill;
    this.pnlServersContainer.Location = new System.Drawing.Point(0, 0);
    this.pnlServersContainer.Name = "pnlServersContainer";
    this.pnlServersContainer.Padding = new System.Windows.Forms.Padding(8, 20, 0, 0);
    this.pnlServersContainer.Size = new System.Drawing.Size(318, 463);
    this.pnlServersContainer.TabIndex = 2;
    // 
    // treeViewServers
    // 
    this.treeViewServers.Dock = System.Windows.Forms.DockStyle.Fill;
    this.treeViewServers.Location = new System.Drawing.Point(11, 23);
    this.treeViewServers.Name = "treeViewServers";
    this.treeViewServers.Size = new System.Drawing.Size(275, 0);
    this.treeViewServers.TabIndex = 0;
    this.treeViewServers.DoubleClick += new System.EventHandler(this.treeViewServers_DoubleClick);
    // 
    // ucServersList
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    this.Controls.Add(this.btnAddServer);
    this.Controls.Add(this.pnlServersContainer);
    this.Name = "ucServersList";
    this.Padding = new System.Windows.Forms.Padding(0, 0, 0, 60);
    this.Size = new System.Drawing.Size(318, 523);
    this.Load += new System.EventHandler(this.ucServersList_Load);
    this.pnlServersContainer.ResumeLayout(false);
    this.ResumeLayout(false);

}
4

5 回答 5

3

Document outline我建议在 Visual Studio中打开编辑器。
这会将所有控件按其层次顺序显示为树。
它还允许您将控件拖放到正确的位置。

View > Other windows > Document outline.

查看控制顺序时,您可能会解决问题。

于 2013-08-02T18:17:51.897 回答
3

我已经想通了。但仍然不知道为什么会这样!

我的树视图FlowLayoutPanel不在里面Panel。当我将其更改为Panel一切正常时。而已!

于 2013-08-02T18:56:52.003 回答
0

问题可能是您已将多个项目添加到同一个父控件,然后当您用其中一个填充父停靠栏时,行为将不是您所期望的。
使用splitcontainer. 并且当您要填写停靠栏时,请确保您的控件属于splitcontainer. 有关具体示例,请参见this 。

于 2013-08-02T18:11:14.130 回答
0

您使用 有什么具体原因FlowLayoutPanel吗?
似乎FlowLayoutPanel不处理除 之外的任何东西Dock.None

我认为你应该Panel为这个应用程序使用一个简单的,因为它不会调整包含的控件的大小 - 该Dock属性的行为符合预期。用 a
替换将解决您的问题。FlowLayoutPanelPanel

于 2013-08-02T18:57:50.227 回答
0

这是一个非常古老的问题......但由于没有公认的答案,我会试一试。

当我的控件设置为自动调整大小时,这发生在我身上。删除自动调整大小或指定最小高度都可以解决此问题。

于 2020-10-09T20:38:50.020 回答