我使用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) 我有一个包含3列和1行的TableLayoutPanel :(删除按钮,用户控件,添加按钮)
我想要添加按钮添加一个类似于上面单击按钮的新行:例如:BEFORE:
点击"添加按钮1"后:
我设法将行添加到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) 我将TableLayoutPanel用于表单中的所有元素.我使用Dock Fill来自动调整TextBox和ListBox.TextBox非常适合TableLayoutPanel的单元格,但不适合ListBox.它按项目高度自动调整大小.

如何删除ListBox底部和表单底部之间的这个差距?我知道我可以将ListBox的高度设置为某个值(例如,ListBox中的项高度为16,16*10个元素= 160,160将正确拟合),但还有其他解决方案吗?
我正在使用C#.
我正在使用Windows c#.
首先,根据我的需要,那些不能改变的事情如下:
TableLayoutPanel是固定的.现在,我想为所有行设置一个修复高度,但是为了增加行数,如果我将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# 中使用 winforms 并查看 TableLayoutPanel
是否可以在大表上有滚动条,但不能让顶行滚动?它类似于 Excel 中“冻结窗格”选项的工作方式。
我只想冻结顶行,别无其他。此外,我的表格足够大,我也会有一个水平滚动条。因此,当我水平滚动时,我需要顶行和其余行同时以相同的速度移动。
我需要编写一个函数,它将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) 我正在尝试制作一个可以托管动态添加控件的面板。有两个注意事项:
我已经看到了一些在表单中居中动态控件的提议解决方案,但由于以下原因而拒绝了这些解决方案:
我想知道我是否缺少一些可以帮助我处理增长/收缩事件而不创建我自己的 TableLayoutPanel 变体的功能?
编辑:
以下是功能草案:
我注意到添加到TableLayoutPanel的每个控件都有"Column"和"Row"属性.如何通过代码访问这些属性?
谢谢:)
得到TableLayoutPanel有1列,单元格所需的N行可以像单元格之间的Splitter组件一样调整大小.不使用SplitContainer.
可能是没有TableLayoutPanel的任何其他想法?
我最近创建了一个没有遵循特定设计模式的 winforms 应用程序。此应用程序有 4 个不同的“视图”,每个视图都使用 TableLayoutPanel 实现。一个视图是“主”视图,允许用户选择输入文件,其他 3 个视图包含 DataGridViews,允许用户处理从输入文件加载的数据。
问题在于我有一个单一的表单,其中包含 4 个不同的面板,这些面板在需要时隐藏并可见。但这导致我的表单类变得比我想要的大得多,因为我有不同的事件和方法来操作同一类中每个面板的数据。所以我做了一些研究并遇到了 Model-View-Presenter,但我只遇到了显示具有单视图的应用程序的示例。
我的问题是,如果我使用MVP并且每个视图都有自己的界面和展示器,并且视图的具体实现是使用Form完成的,那么在视图之间切换的最佳方式是什么(例如,单击“下一步”时) .
我的观点的具体实现应该是一个表格吗?我在这里错过了什么吗?我想遵循 MVP 模式,但如果有更好的选择,我愿意接受建议。
tablelayoutpanel ×10
winforms ×9
c# ×8
.net ×2
datagridview ×1
dock ×1
listbox ×1
mvp ×1
properties ×1
row-height ×1
scrollbar ×1
splitter ×1