c#winforms dock填充树视图使其消失

本文关键字:消失 视图 dock 填充 c#winforms | 更新日期: 2023-09-27 18:25:55

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

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

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

我得到的
用户控件采用预期的完整大小,但树视图看起来像是隐藏的。我检查了一下高度,发现是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);
}

c#winforms dock填充树视图使其消失

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

View > Other windows > Document outline打开。

您可以在查看控件顺序时解决问题。

我已经想通了。但仍然不知道为什么会发生这种事!

我的树视图位于FlowLayoutPanel内部,而不是Panel内部。当我把它改成Panel时,一切都很好。就是这样!

问题可能是您向同一个父控件添加了几个项,然后当您用其中一个项填充父控件时,行为将与您预期的不一样
使用splitcontainer。当你想填充dock时,确保你的控件属于splitcontainer的两个不同面板。具体示例请参见此。

您使用FlowLayoutPanel的具体原因是什么
CCD_ 16似乎不处理除CCD_。

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

这是一个非常古老的问题。。。但既然没有公认的答案,我就试一试。

当我的控制设置为自动缩放时,我就遇到了这种情况。删除自动大小或指定最小高度可以解决此问题。