我有一个tablelayoutpanel.2x2 - 2列2行.
例如,我在第1行第二列中添加了一个按钮button1.button1的dock属性设置为Fill.VS Designer允许设置button1的列/行范围属性.
我希望可用性以编程方式更改button1的 行跨度属性,因此它可以填充所有第二列(1行和第2行)和可用性以将其设置回来.
怎么样?
在Windows窗体中使用TableLayoutPanel.我正在使用RowStyles和ColumnStyles,SizeType分别为AutoSize和Percent.我需要找出放置特定控件的单元格的绝对高度和宽度.
TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1);
int height = (int)tableLayoutPanel1.RowStyles[pos.Row].Height;
int width = (int)tableLayoutPanel1.ColumnStyles[pos.Column].Width;
Run Code Online (Sandbox Code Playgroud)
上面,我的高度为0. RowStyle的SizeType为AutoSize.同样,我得到了33.33.ColumnStyle设置为SizeType为Percent,Size = 33.33.
我需要获得单元格的绝对大小(以像素为单位).
我的tablelayout面板有一列三行.(一个停靠在每个单元格中的"填充"面板.)
现在我希望能够隐藏/显示行.我希望任何时候只能看到一行(根据用户选择的一些单选按钮),我想调整大小,以便填充TableLayoutPanel的所有区域.
我怎样才能做到这一点?有什么想法吗?
有没有办法让TableLayoutPanel上的控件的文本内容正确对齐?我在第0列中有标签,在第1列中有文本框(或偶尔使用ComboBox或NumericUpDown控件),但标签中的文本通常是大多数行上的一个像素或两个(垂直).
我有TableLayoutPanel用于动态创建AutoScroll = true的控件.添加新控件时,它工作正常.但是当我删除并且所有控件都可见时,可以看到垂直滚动.这里有一些截图:
预期/正确的滚动可见性:
可见性不正确:

有任何想法吗?
更新:这是一些代码
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel1.RowCount = 0;
tableLayoutPanel1.RowStyles.Clear();
tableLayoutPanel1.AutoScroll = true;
tableLayoutPanel1.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0);
foreach (var item in objects)
{
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tableLayoutPanel1.Controls.Add(CreateNewItem(item));
}
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tableLayoutPanel1.Controls.Add(CreateAddButton());
tableLayoutPanel1.ResumeLayout();
Run Code Online (Sandbox Code Playgroud)
以及删除代码
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel1.Controls.Remove(item);
tableLayoutPanel1.RowStyles.RemoveAt(0);
tableLayoutPanel1.RowCount--;
tableLayoutPanel1.ResumeLayout();
Run Code Online (Sandbox Code Playgroud)
AutoSize为true,AutoSizeMode为GrowAndShrink
c# scrollbar tablelayoutpanel vertical-scroll vertical-scrolling
我可能没有使用正确的控件来满足我的需求.我正在填充一个带控件的表,我希望每列自动调整其中包含的控件的大小.例如,一列文本框将比一列复选框宽.由于不同的操作系统,不同的DPI,不同的字体等的复杂性,我不想摆弄测量是否能帮助它.桌子可以水平扩展以适应控件,带有滚动条.如何通过TableLayoutPanel或其他控件实现这一点?
谢谢.
编辑添加代码:
private void UpdateLocations()
{
tableLayoutPanel1.RowCount = CurrentSchedule.location.Length + 1;
tableLayoutPanel1.ColumnCount = 7;
int row = 1;
int timeWidth = TextRenderer.MeasureText("00:00:00x", tableLayoutPanel1.Font).Width;
Label lab = new Label();
lab.Text = "Location";
tableLayoutPanel1.Controls.Add(lab, 0, 0);
lab = new Label();
lab.Text = "Arrive";
tableLayoutPanel1.Controls.Add(lab, 1, 0);
lab = new Label();
lab.Text = "Depart";
tableLayoutPanel1.Controls.Add(lab, 2, 0);
lab = new Label();
lab.Text = "Pass?";
tableLayoutPanel1.Controls.Add(lab, 3, 0);
lab = new Label();
lab.Text = "Path";
tableLayoutPanel1.Controls.Add(lab, 4, 0);
lab = new Label();
lab.Text …Run Code Online (Sandbox Code Playgroud) 这个问题比解释的更好,所以我在Visual Studio 2010项目中设置了一个git repo,用于查看实际问题.
我有一个项目,我已经将一个ComboBox控件(comboField)添加到TableLayout控件(tableLayoutPanel1).我已经设置了DockComboBox 的属性,Fill以便它填充它所放置的TableLayout控件的单元格.我还设置Dock了TableLayout控件的属性,Fill以便它填充已放置的Form上.ComboBox的宽度目前为193像素.
当我运行窗体并增加其宽度时,ComboBox的大小会增加,如预期的那样.当我减小窗体的大小时,ComboBox的大小会缩小,直到达到原始大小(193像素).此时,ComboBox的宽度不会进一步减小,导致控件的右侧被剪裁.这与我的预期相反:ComboBox的宽度将减少到零,因为没有MinimumSize指定.也没有MinimumSize为表单上的任何其他控件指定,例如TableLayout控件.
如果它是相关的,TableLayout的第一列的宽度设置为Absolute100像素的大小,而TableLayout的第二列的宽度已设置为AutoSize.
任何人都可以解释为什么这种形式的表现与我的期望相反,并建议我如何以我想要的方式工作?任何帮助将非常感激.
每当我尝试使用D表单库时,我都会遇到它没有的事实TableLayoutPanel- 这使得我几乎不可能创建一个好的GUI.
TableLayoutPanelDFL 有没有实施?
如果没有它,人们通常如何使用这个库?
使用DFL的另一个程序的链接将是答案的一个很好的奖励.:)
我使用TableLayoutPanel进行出勤标记.我在此TableLayoutPanel中添加了控件(Panel和Label)并为它们创建了事件.在某些情况下,我已经清除了所有控件,并继续将相同的控件绑定在TableLayoutPanel的不同位置.在重新绑定控件时,TableLayoutPanel会在初始化时闪烁并且速度太慢.
我正在使用一个TableLayoutPanel动态填充其他的TablelayoutPanels.
现在我想知道当我调用TableLayoutPanel.Controls.Clear动态填充时会发生什么TableLayoutPanel.显然,所有的子布局都被删除了,但他们的孩子怎么样?它们是否也妥善处理,还是需要担心内存泄漏?
我应该在打电话之前递归删除孩子的孩子Clear()吗?