标签: tablelayoutpanel

TableLayoutPanel:无法正确获取内容行的大小

我使用TableLayoutPanel将客户区分成3行(只有1列).顶部和底部行设计为固定高度; 它们将包含一个页眉和一个页脚,最初每个页面都包含一个包含静态文本的子标签控件(只是为了开始).中间行应该动态调整大小以填充剩余区域.此中间窗格最终将包含列表视图.我有一个管理器类,它将被管理的面板(ExplorerTableLayoutPanel)对象作为参数:

public class ExplorerTableLayoutPanelManager
{       
    public ExplorerTableLayoutPanelManager(ExplorerTableLayoutPanel panel)
    {
        LayoutPanel = panel;
    }
Run Code Online (Sandbox Code Playgroud)

有3种方法可以在表格布局中创建3行中的每一行:

    private void AddHeaderRow()
    {
        const int headerHeight = 30;
        LayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, headerHeight));

        Label label = new Label();
        label.BackColor = Color.AliceBlue;
        label.BorderStyle = BorderStyle.None;
        label.ForeColor = Color.LightGray;
        label.TextAlign = ContentAlignment.MiddleRight;
        label.Text = "Header Banner";
        label.Dock = DockStyle.Fill;
        float size = label.Font.SizeInPoints;
        label.Font = new Font(label.Font.Name, size * 2);

        const int column = 0, row = 0;
        LayoutPanel.Controls.Add(label, column, row);
    }


    private void AddBodyRow()
    {
        LayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize)); …
Run Code Online (Sandbox Code Playgroud)

tablelayoutpanel

5
推荐指数
2
解决办法
1万
查看次数

如何将行添加到TableLayoutPanel的中间

我有一个包含3列和1行的TableLayoutPanel :(删除按钮,用户控件,添加按钮)

我想要添加按钮添加一个类似于上面单击按钮的新行:例如:BEFORE:

  1. (删除按钮1,用户控制2,添加按钮1)
  2. (删除按钮2,用户控制2,添加按钮2)

点击"添加按钮1"后:

  1. (删除按钮1,用户控制2,添加按钮1)
  2. (删除按钮3,用户控制3,添加按钮3)
  3. (删除按钮2,用户控制2,添加按钮2)

我设法将行添加到tablelayoupanel的末尾,但不添加到中间:它一直搞砸了布局.这是事件处理程序的片段:

void MySecondControl::buttonAdd_Click( System::Object^ sender, System::EventArgs^ e )
{
   int rowIndex = 1 + this->tableLayoutPanel->GetRow((Control^)sender);

   /* Remove button */
   Button^ buttonRemove = gcnew Button();
   buttonRemove->Text = "Remove";
   buttonRemove->Click += gcnew System::EventHandler(this, &MySecondControl::buttonRemove_Click);

   /* Add button */
   Button^ buttonAdd = gcnew Button();
   buttonAdd->Text = "Add";
   buttonAdd->Click += gcnew System::EventHandler(this, &MySecondControl::buttonAdd_Click);

   /*Custom user control */
   MyControl^ myControl = gcnew MyControl();

   /* Add the controls to the Panel. */
   this->tableLayoutPanel->RowCount += 1;
   this->tableLayoutPanel->Controls->Add(buttonRemove, 0, …
Run Code Online (Sandbox Code Playgroud)

user-controls tablelayoutpanel winforms

5
推荐指数
1
解决办法
3253
查看次数

ListBox按项目高度自动调整大小

我将TableLayoutPanel用于表单中的所有元素.我使用Dock Fill来自动调整TextBox和ListBox.TextBox非常适合TableLayoutPanel的单元格,但不适合ListBox.它按项目高度自动调整大小.

在此输入图像描述

如何删除ListBox底部和表单底部之间的这个差距?我知道我可以将ListBox的高度设置为某个值(例如,ListBox中的项高度为16,16*10个元素= 160,160将正确拟合),但还有其他解决方案吗?
我正在使用C#.

c# listbox dock tablelayoutpanel winforms

5
推荐指数
2
解决办法
1万
查看次数

修复TableLayoutPanel中每行的行高

我正在使用Windows c#.

首先,根据我的需要,那些不能改变的事情如下:

  1. 大小TableLayoutPanel是固定的.
  2. 列的总数是固定的.

现在,我想为所有行设置一个修复高度,但是为了增加行数,如果我将RowStyle属性设置为Percentwith 100.0F然后它适用于3到4个项目,但是在4-5个项目之后,一行上的控件将覆盖控件另一排.

我已经搜索了这个,但我无法得到正确的答案.我也试过AutoSize,Percent,Absolute的特性RowStyle,即使它不能正常工作.

那该怎么办?怎么办?我怎样才能做到这一点?

最终,我想像DataGridViewWindows C#一样做.

提前致谢....

我正在使用WinForms ...示例代码在这里..

int cnt = tableLayout.RowCount = myDataTable.Rows.Count;

tableLayout.Size = new System.Drawing.Size(555, 200);

for (int i = 1; i <= cnt; i++)
{

    Label lblSrNo = new Label();
    lblSrNo.Text = i.ToString(); 

    TextBox txt = new TextBox();
    txt.Text = ""; 
    txt.Size = new System.Drawing.Size(69, 20);

    tableLayout.Controls.Add(lblSrNo, 0, i - 1);
    tableLayout.Controls.Add(txt, 1, …
Run Code Online (Sandbox Code Playgroud)

c# row-height tablelayoutpanel winforms

5
推荐指数
1
解决办法
2万
查看次数

C# tableLayoutPanel 滚动除顶行以外的所有内容

我在 C# 中使用 winforms 并查看 TableLayoutPanel

是否可以在大表上有滚动条,但不能让顶行滚动?它类似于 Excel 中“冻结窗格”选项的工作方式。

我只想冻结顶行,别无其他。此外,我的表格足够大,我也会有一个水平滚动条。因此,当我水平滚动时,我需要顶行和其余行同时以相同的速度移动。

c# scrollbar tablelayoutpanel winforms

5
推荐指数
0
解决办法
993
查看次数

如何动态设置TableLayoutPanel中的单元格颜色?

我需要编写一个函数,它将TableLayoutPanel在运行程序期间根据某些条件设置单元格中的颜色.

TableLayoutPanel除以16x16.程序开始时有一些条件.如果细胞的条件为真,则此销售必须涂成蓝色.例如:

private void start_Click(object sender, EventArgs e)
{
    foreach (string str in some_list)
    {
       if (some condition)
       {
           set_color_in_cell at row[i] colum[j] //(what shoud i use here?)
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

我找到了这样的例子:

private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
    if (e.Row == 0 && e.Column == 1)
    {
        e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.CellBounds);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不明白如何使用它.如果有人知道这个,请帮助我.

private void start_Click(object sender, EventArgs e)
{
    string SyncAnswer = "";
    foreach (string file_string in Data_from_file)
    {
       COM_Port.WriteLine(file_string);
       while (SyncAnswer != "READY")
       { …
Run Code Online (Sandbox Code Playgroud)

.net c# tablelayoutpanel winforms

5
推荐指数
1
解决办法
2万
查看次数

在 FlowLayoutPanel 中居中多行控件

我正在尝试制作一个可以托管动态添加控件的面板。有两个注意事项:

  • 将会有很多控件,因此面板应该在元素达到其宽度限制并垂直滚动时将元素包装到新行中。
  • 控件的大小可以改变,这会改变
    可以放入一行的元素数量。

我已经看到了一些在表单中居中动态控件的提议解决方案,但由于以下原因而拒绝了这些解决方案:

  • TableLayoutPanel - 我使用它的主要问题是元素增长并且必须从 3-2 网格转换到 2-4 时的事件,因为 TableLayoutPanel 似乎不能很好地处理这些事件。
  • AutoSize FlowLayoutPanel 可以在 TableLayoutControl 内部增长和缩小——我对这个解决方案的主要问题是它只在 Form 内居中一行,一旦它换到一个新行,元素就开始与右侧对齐。我想我可以动态地将新的 FlowLayoutPanels 添加到 TableLayoutControl 的新行,但是我遇到了与第一个场景类似的问题,如果元素的大小增加/缩小,我需要在行之间手动重新分配元素。

我想知道我是否缺少一些可以帮助我处理增长/收缩事件而不创建我自己的 TableLayoutPanel 变体的功能?

编辑:
以下是功能草案:

  • A - 以面板居中的两个元素
  • B - 添加了第三个元素,所有三个元素都居中
  • C - 添加第四个元素,换行并居中
  • D - 元素放大,现在包裹在第二个元素上,居中

草案

.net c# tablelayoutpanel flowlayoutpanel winforms

5
推荐指数
1
解决办法
1500
查看次数

TableLayoutPanel的控制列属性


我注意到添加到TableLayoutPanel的每个控件都有"Column"和"Row"属性.如何通过代码访问这些属性?
谢谢:)

c# properties tablelayoutpanel winforms

4
推荐指数
1
解决办法
2708
查看次数

如何使用可调整大小的单元格来制作TableLayoutPanel,例如使用Splitter

得到TableLayoutPanel有1列,单元格所需的N行可以像单元格之间的Splitter组件一样调整大小.不使用SplitContainer.

可能是没有TableLayoutPanel的任何其他想法?

c# tablelayoutpanel splitter winforms

4
推荐指数
2
解决办法
4073
查看次数

具有多个视图的 Winforms MVP 模式

我最近创建了一个没有遵循特定设计模式的 winforms 应用程序。此应用程序有 4 个不同的“视图”,每个视图都使用 TableLayoutPanel 实现。一个视图是“主”视图,允许用户选择输入文件,其他 3 个视图包含 DataGridViews,允许用户处理从输入文件加载的数据。

问题在于我有一个单一的表单,其中包含 4 个不同的面板,这些面板在需要时隐藏并可见。但这导致我的表单类变得比我想要的大得多,因为我有不同的事件和方法来操作同一类中每个面板的数据。所以我做了一些研究并遇到了 Model-View-Presenter,但我只遇到了显示具有单视图的应用程序的示例。

我的问题是,如果我使用MVP并且每个视图都有自己的界面和展示器,并且视图的具体实现是使用Form完成的,那么在视图之间切换的最佳方式是什么(例如,单击“下一步”时) .

我的观点的具体实现应该是一个表格吗?我在这里错过了什么吗?我想遵循 MVP 模式,但如果有更好的选择,我愿意接受建议。

c# mvp datagridview tablelayoutpanel winforms

4
推荐指数
1
解决办法
2039
查看次数