我有一个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);
}
答案 0 :(得分:3)
我已经弄清楚了。但还是不知道为什么会这样!
我的树视图位于FlowLayoutPanel
内,而不是Panel
。当我把它改为Panel
时,一切都很顺利。就是这样!
答案 1 :(得分:2)
我建议在Visual Studio中打开Document outline
编辑器
这将按层次顺序显示所有控件作为树
它还可以让你拖动和放大将控件放到正确的位置。
使用View > Other windows > Document outline
打开它。
您可以在查看控件订单时解决问题。
答案 2 :(得分:0)
问题可能是您已将多个项目添加到同一个父控件,然后当您使用其中一个填充父目录时,行为将不是您所期望的。
使用splitcontainer
。当您想填写停靠栏时,请确保您的控件属于splitcontainer
的两个不同面板。
有关具体示例,请参阅this。
答案 3 :(得分:0)
您使用FlowLayoutPanel
的具体原因是什么?
似乎FlowLayoutPanel
不会处理Dock.None
以外的任何其他内容。
我认为您应该为此应用程序使用简单的Panel
,因为它不会调整所包含的控件的大小 - Dock
属性的行为与预期一致。
用FlowLayoutPanel
替换Panel
将解决您的问题。
答案 4 :(得分:0)
这是一个非常古老的问题...但是由于没有公认的答案,因此我将尝试一下。
当我的控件设置为自动调整大小时,这发生在我身上。删除自动调整大小或指定最小高度都可以解决此问题。