我有一个tableLayoutPanel,有5或7列.用户可以点击"显示/隐藏周末"按钮从5天切换到7天.
问题:当你开始5天,然后按5/7按钮,7列不均匀间隔...第6列比其余部分小得多.奇怪的是,如果你从7天开始,一切看起来都不错.当你切换到5然后回到7,仍然一切都很好??
void lblSatSunday_Click(object sender, EventArgs e)
{
ShowZaterdagZondag = !ShowZaterdagZondag;
AddDisplayControls();
}
private void AddDisplayControls()
{
tblPanel.SuspendLayout();
tblPanel.Controls.Clear();
tblPanel.ColumnCount = ShowZaterdagZondag ? 7 : 5; // <<<-------
tblPanel.RowCount = 1;
tblPanel.GrowStyle = TableLayoutPanelGrowStyle.FixedSize;//.AddColumns;
for (int i = 0; i < tblPanel.ColumnCount; i++)
{
ColumnStyle cs = new ColumnStyle(SizeType.Percent, 100 / tblPanel.ColumnCount);
tblPanel.ColumnStyles.Add(cs);
//Add accordeon
Accordeon a = new Accordeon();
//Removed code for reading
tblPanel.Controls.Add(a);
}
tblPanel.ResumeLayout();
}
Run Code Online (Sandbox Code Playgroud) Windows窗体中Flowlayout和Tablelayout有什么区别?我知道我可以谷歌,但我的时间有点短.
我的要求也是,当表单调整大小时.调整窗体大小不应该弄乱控件的对齐,它应该对分辨率的变化做出反应.
我动态地为TableLayoutPanel生成控件.我在每一行都有一个删除按钮.当我点击它时,必须删除该行.
Dim removeBtn As New Button
AddHandler removeBtn.Click, AddressOf DeleteRow
tlp.Controls.Add(removeBtn, 5, rowCount)
Run Code Online (Sandbox Code Playgroud)
我没有显示添加类似于上面的文本框的代码.我可以得到点击按钮的行号.使用此,如何从此行中删除所有控件.
Private Sub DeleteRow(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim currentRow As Integer = CType(CType(sender, Button).Parent, TableLayoutPanel).GetRow(CType(sender, Button))
'Using this currentRow, how to delete this Row
End Sub
Run Code Online (Sandbox Code Playgroud) 我发现c#(.net 2.0)中的表格布局面板非常原始.我想允许我的用户在表格布局面板中调整列的大小,但是没有现成的选项可以这样做.有没有办法找出光标是否直接在一个单元格的任何边界上,如果是,哪个单元格在它下面?可能有这些信息,我们至少可以尝试通过'代码调整行/列的大小.帮我找到,
非常感谢,
Sudarsan Srinivasan
这很简单.
我有一个TableLayoutPanel,它基于数据库查询填充了控件(只有标签,按钮和一些带按钮的面板).当需要刷新数据时,我使用TableLayoutPanel.Controls.Clear().不幸的是,这是一个非常缓慢的操作.我希望它比填充表格的代码更快,但它至少慢3或4倍.
我明确地证明了缓慢是在执行Controls.Clear()时执行此操作,因为在显示消息框之后对TableLayoutPanel执行了单一操作(然后过程返回).控件从下往上明显消失.当记录集用于重新填充TableLayoutPanel时,从上到下显示的控件的速度几乎比我看到的快.
我已经在做TableLayoutPanel.SuspendLayout()和ResumeLayout().
this.DoubleBuffered = true在表单上使用似乎没有做任何事情.
我可以通过代码处理整个控件并重新创建它,但这是一个很大的痛苦,并使一个漂亮的表单设计器GUI毫无意义.我将不得不深入研究我在控件上设置的每个属性并为其创建一行代码(虽然我想我可以从设计器代码本身中获取它,但它仍然感觉不对).
关于如何更快地完成工作的任何想法?我甚至愿意使用除TableLayoutPanel之外的其他方法...我只需要自由地为每个单元格放置多个按钮或禁止它能够跨越表头中的列.
C#在重绘时能否至少冻结整个表格,然后立即全部绘制?
我的应用程序使用驻留在TabPage中的TableLayoutPanel.
如果我添加的项目数量相对较少(即它没有"填满"整个标签页),那么最后一行的高度会被拉伸.以下是正在发生的事情的屏幕截图:

我试图将表的属性更改为Autosize,GrowAndShrink等,但似乎没有什么能阻止这种情况发生.
以下是我对表格布局属性的当前设置:

如何让最后一行与其他行的大小相同?
谢谢
我有一个TextBox位于FlowLayoutPanela 的单元格内的TableLayoutPanel。跨越FlowLayoutPanel5 列TableLayoutPanel并填满 5 列的整个宽度。但是, 并TextBox没有填满 的整个宽度FlowLayoutPanel,正如您在此处看到的那样(黑色边框是FlowLayoutPanel):

我怎样才能让TextBox横跨整个宽度FlowLayoutPanel?
生成此示例的代码:
// fsi --exec Test.fsx
open System
open System.Windows.Forms
let frmMain () =
let f = new Form(Text = "Test table layout panel")
let tlp =
new TableLayoutPanel
( ColumnCount = 5,
RowCount = 1,
AutoSize = true,
Parent = f )
let flp =
new FlowLayoutPanel
( AutoSize = true,
BorderStyle …Run Code Online (Sandbox Code Playgroud) 基本上我遇到了删除tablelayoutpanel中控件之间的填充/边距的问题.
我已将tablelayoutpanel边距和填充设置为0. Cellborderstyle为none.
对于边距和填充,添加的控件都设置为0.
然而,这种神秘的边缘不断出现.有帮助吗?
在这里尝试了这两个解决方案和网上的其他各种解决方案,但没有一个可以消除它们之间的间距
在VS2010上运行.net 4.5
Form1.cs的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Multiply {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
LoadBoard(10, 10);
}
private void LoadBoard(int col, int row) {
board.ColumnCount = col;
board.RowCount = row;
board.BorderStyle = BorderStyle.FixedSingle;
float colSize = 100f / col;
float rowSize = 100f / row;
board.ColumnStyles[0].SizeType = SizeType.Percent;
board.ColumnStyles[0].Width = colSize; …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我真的需要放置很多控件(标签,文本框,domainupdown).所以我继续使用了一些嵌套TableLayoutPanel.现在的问题是,这种形式对大多数事件响应非常缓慢(调整大小,最大化,最小化和......)表格中的控件实际需要花费5秒才能调整大小,重新绘制到新的表单大小.
我现在把手指放在眼睛里!如果这个表格在我的家用电脑上很慢(i7 @ 4GHz和一张好的显卡)它会在旧的P4电脑上运行吗?
我甚至尝试使用下面的代码,但它绝对没有任何东西,如果它不会减慢它的速度!
private void FilterForm_ResizeBegin(object sender, EventArgs e)
{
foreach(TableLayoutPanel tlp in panelFilters.Controls)
{
if(tlp != null)
{
tlp.SuspendLayout();
}
}
}
private void FilterForm_ResizeEnd(object sender, EventArgs e)
{
foreach (TableLayoutPanel tlp in panelFilters.Controls)
{
if (tlp != null)
{
tlp.ResumeLayout();
}
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我是否有一个技巧可以让tablelayoutpanel更快地工作......或者如果你知道一个更好的方法来放置大约数百个很好地对齐的控件.
我有一个简单的1x3 TableLayoutPanel.我想要实现一个非常简单的事情:当窗口调整大小时,调整中间行的大小并保持顶部和底部相同.我尝试做逻辑事情,即设置刚性的顶行和底行大小并自动调整中间行.不幸的是,这是调整大小的底线.
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.tableLayoutPanel1.Controls.Add(this.topPanel, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.middlePanel, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.bottomPanel, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 140F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1102, 492);
this.tableLayoutPanel1.TabIndex = 19;
Run Code Online (Sandbox Code Playgroud)
所有内部面板都将Dock设置为Fill和默认锚点.我究竟做错了什么?