C# 使用TableLayoutPanel控件实现控件随着窗体大小自动改变

2,936 阅读13分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

前言

如果你学C# Winform开发这个TableLayoutPanel控件就是非常重要的,也是非常值得去学习的一个控件,这个TableLayoutPanel控件是我们布局的一个很好很实用的一个控件,我们可以通过利用这个TableLayoutPanel控件对界面的设计更加方便,它类似于html的table标签,在很早之前我们的html网页是用table布局,只是现在是用Div,它的每个空格就相当于一个panel容器,可以展示控件,我们通过集合很多控件放置实现自动调整空格内的大小。

20200817629544_bgKxDz.jpg

初识展示

对于TableLayoutPanel控件的一些基本使用方法的简介,我们从工具箱中将TableLayoutPanel控件拖出来,并对它的一些基本的操作学习一下如下图所示: image.png

image.png 在它的编辑行和列的选项中,我们对于行的比例或者列的比例大小进行设置和编辑,可以使用这个对话框对这些属性的设置,它的绝对值是固定大小不会因为,窗体大小去自动改变我们加入在里面的控件 image.png

image.png 对于这TableLayoutPanel控件的一些最基本的设置也是最常用的设置,就是Dock了,需要设置好Dock的才能实现随着窗体的大小去自动变换,另外RowSpan和ColumnSpan是对TableLayoutPanel控件的合并使用,TableLayoutPanel控件自带是没有这个属性的需要我们设置里面的控件实现合并 image.png

效果展示

窗体里面的控件随着窗体的大小自动变大变小,而且是等比例变大变小。 image.png

image.png

代码逻辑

这篇文章只是对于这个控件的学习和怎么去布局我们的项目,没什么代码,我将一些常用的属性放在下面给大家收藏

AccessibilityNotifyClients(AccessibleEvents, Int32)
就指定子控件的指定 AccessibleEvents 通知辅助功能客户端应用程序。
AccessibilityNotifyClients(AccessibleEvents, Int32, Int32)
就指定子控件的指定 AccessibleEvents 通知辅助功能客户端应用程序。
AdjustFormScrollbars(Boolean)
根据当前控件位置和当前所选控件调整容器中的滚动条。
BeginInvoke(Action)
在创建控件的基础句柄所在线程上异步执行指定委托。
BeginInvoke(Delegate)
在创建控件的基础句柄所在线程上异步执行指定委托。
BeginInvoke(Delegate, Object[])
在创建控件的基础句柄所在线程上,用指定的自变量异步执行指定委托。
BringToFront()
将控件带到 Z 顺序的前面。
Contains(Control)
检索一个值,该值指示指定控件是否为一个控件的子控件。
CreateAccessibilityInstance() (继承自 Panel)
CreateControl()
强制创建可见控件,包括创建句柄和任何可见子控件。
CreateControlsInstance()
为控件创建控件集合的新实例。
CreateGraphics()
为控件创建 Graphics。
CreateHandle()
为该控件创建句柄。
CreateObjRef(Type)
创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。
DefWndProc(Message)
向默认窗口过程发送指定消息。
DestroyHandle()
毁坏与该控件关联的句柄。
Dispose()
释放由 Component 使用的所有资源。
Dispose(Boolean)
释放由 Control 和它的子控件占用的非托管资源,另外还可以释放托管资源。
DoDragDrop(Object, DragDropEffects)
开始拖放操作。
DrawToBitmap(Bitmap, Rectangle)
支持对指定位图的呈现。
EndInvoke(IAsyncResult)
检索由传递的 IAsyncResult 表示的异步操作的返回值。
Equals(Object)
确定指定对象是否等于当前对象。
FindForm()
检索控件所在的窗体。
Focus()
为控件设置输入焦点。
GetAccessibilityObjectById(Int32)
检索指定的 AccessibleObject。
GetAutoSizeMode()
检索一个值,该值指示当启用控件的 AutoSize 属性时控件的行为方式。
GetCellPosition(Control)
获取表示单元格的行号和列号的 TableLayoutPanelCellPosition。
GetChildAtPoint(Point)
检索位于指定坐标处的子控件。
GetChildAtPoint(Point, GetChildAtPointSkip)
检索位于指定坐标的子控件,并且指定是否忽略特定类型的子控件。
GetColumn(Control)
返回指定子控件的列位置。
GetColumnSpan(Control)
返回指定子控件跨的列数。
GetColumnWidths()
返回一个数组,该数组表示 TableLayoutPanel 中的列的宽度(以像素为单位)。
GetContainerControl()
沿着控件的父控件链向上,返回下一个 ContainerControl。
GetControlFromPosition(Int32, Int32)
返回占据指定位置的子控件。
GetHashCode()
作为默认哈希函数。
GetLifetimeService()
检索控制此实例的生存期策略的当前生存期服务对象。
(继承自 MarshalByRefObject)
GetNextControl(Control, Boolean)
按照子控件的 Tab 键顺序向前或向后检索下一个控件。
GetPositionFromControl(Control)
获取表示包含此控件的单元格的行和列的 TableLayoutPanelCellPosition。
GetPreferredSize(Size)
检索适合控件的矩形区域的大小。
GetRow(Control)
返回指定子控件的行位置。
GetRowHeights()
返回一个数组,该数组表示 TableLayoutPanel 中的行的高度(以像素为单位)。
GetRowSpan(Control)
返回指定子控件跨的行数。
GetScaledBounds(Rectangle, SizeF, BoundsSpecified)
检索缩放控件时的边界。
GetScrollState(Int32)
确定是否设置了指定的标志。
GetService(Type)
返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。
GetStyle(ControlStyles)
为控件检索指定控件样式位的值。
GetTopLevel()
确定控件是否是顶级控件。
GetType()
获取当前实例的 Type。
Hide()
对用户隐藏控件。
InitializeLifetimeService()
获取生存期服务对象来控制此实例的生存期策略。
InitLayout()
在将控件添加到另一个容器之后调用。
Invalidate()
使控件的整个图面无效并导致重绘控件。
Invalidate(Boolean)
使控件的特定区域无效并向控件发送绘制消息。 还可以使分配给该控件的子控件无效。
Invalidate(Rectangle)
使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。
Invalidate(Rectangle, Boolean)
使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。 还可以使分配给该控件的子控件无效。
Invalidate(Region)
使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。
Invalidate(Region, Boolean)
使控件的指定区域无效(将其添加到控件的更新区域,下次绘制操作时将重新绘制更新区域),并向控件发送绘制消息。 还可以使分配给该控件的子控件无效。
Invoke(Action)
在拥有此控件的基础窗口句柄的线程上执行指定的委托。
Invoke(Delegate)
在拥有此控件的基础窗口句柄的线程上执行指定的委托。
Invoke(Delegate, Object[])
在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。
Invoke<T>(Func<T>)
在拥有此控件的基础窗口句柄的线程上执行指定的委托。
InvokeGotFocus(Control, EventArgs)
为指定的控件引发 GotFocus 事件。
InvokeLostFocus(Control, EventArgs)
为指定的控件引发 LostFocus 事件。
InvokeOnClick(Control, EventArgs)
为指定的控件引发 Click 事件。
InvokePaint(Control, PaintEventArgs)
为指定的控件引发 Paint 事件。
InvokePaintBackground(Control, PaintEventArgs)
为指定的控件引发 PaintBackground 事件。
IsInputChar(Char)
确定一个字符是否是控件可识别的输入字符。
IsInputKey(Keys)
确定指定的键是常规输入键还是需要预处理的特殊键。
LogicalToDeviceUnits(Int32)
将逻辑 DPI 值转换为它的等效 DeviceUnit DPI 值。
LogicalToDeviceUnits(Size)
通过为当前 DPI 缩放小大并将其向下舍入为最接近的宽度和高度的整数值,将大小从逻辑单位转换为设备单位。
MemberwiseClone()
创建当前 Object 的浅表副本
MemberwiseClone(Boolean)
创建当前 MarshalByRefObject 对象的浅表副本。
绘制面板的背景。
OnParentBackColorChanged(EventArgs)
当控件容器的 BackColorChanged 属性值更改时,将引发 BackColor 事件。
OnParentBackgroundImageChanged(EventArgs)
当控件容器的 BackgroundImageChanged 属性值更改时,将引发 BackgroundImage 事件。
OnParentBindingContextChanged(EventArgs)
当控件容器的 BindingContextChanged 属性值更改时,将引发 BindingContext 事件。
OnParentChanged(EventArgs)
引发 ParentChanged 事件。
OnParentCursorChanged(EventArgs)
引发 CursorChanged 事件。
OnParentEnabledChanged(EventArgs)
当控件容器的 EnabledChanged 属性值更改时,将引发 Enabled 事件。
OnParentFontChanged(EventArgs)
当控件容器的 FontChanged 属性值更改时,将引发 Font 事件。
OnParentForeColorChanged(EventArgs)
当控件容器的 ForeColorChanged 属性值更改时,将引发 ForeColor 事件。
OnParentRightToLeftChanged(EventArgs)
当控件容器的 RightToLeftChanged 属性值更改时,将引发 RightToLeft 事件。
OnParentVisibleChanged(EventArgs)
当控件容器的 VisibleChanged 属性值更改时,将引发 Visible 事件。
OnPreviewKeyDown(PreviewKeyDownEventArgs)
引发 PreviewKeyDown 事件。
OnPrint(PaintEventArgs)
引发 Paint 事件。
OnQueryContinueDrag(QueryContinueDragEventArgs)
引发 QueryContinueDrag 事件。
OnRegionChanged(EventArgs)
引发 RegionChanged 事件。
OnResize(EventArgs)
激发指示面板已调整大小的事件。 继承控件应使用此成员以支持实际侦听事件,但仍应调用 base.onResize 以确保为外部侦听器激发事件。
OnRightToLeftChanged(EventArgs)
引发 RightToLeftChanged 事件。
(继承自 ScrollableControl)
OnScroll(ScrollEventArgs)
引发 Scroll 事件。
(继承自 ScrollableControl)
OnSizeChanged(EventArgs)
引发 SizeChanged 事件。
OnStyleChanged(EventArgs)
引发 StyleChanged 事件。
OnSystemColorsChanged(EventArgs)
引发 SystemColorsChanged 事件。
OnTabIndexChanged(EventArgs)
引发 TabIndexChanged 事件。
OnTabStopChanged(EventArgs)
引发 TabStopChanged 事件。
OnTextChanged(EventArgs)
引发 TextChanged 事件。
OnValidated(EventArgs)
引发 Validated 事件。
OnValidating(CancelEventArgs)
引发 Validating 事件。
OnVisibleChanged(EventArgs)
引发 VisibleChanged 事件。
PerformLayout()
强制控件将布局逻辑应用于其所有子控件。
PerformLayout(Control, String)
强制控件将布局逻辑应用于其所有子控件。
PointToClient(Point)
将指定屏幕点的位置计算成工作区坐标。
PointToScreen(Point)
将指定工作区点的位置计算成屏幕坐标。
PreProcessControlMessage(Message)
在调度键盘或输入消息之前,在消息循环内对它们进行预处理。
PreProcessMessage(Message)
在调度键盘或输入消息之前,在消息循环内对它们进行预处理。
ProcessCmdKey(Message, Keys)
处理命令键。
ProcessDialogChar(Char)
处理对话框字符。
ProcessDialogKey(Keys)
处理对话框键。
ProcessKeyEventArgs(Message)
处理键消息并生成适当的控件事件。
ProcessKeyMessage(Message)
处理键盘消息。
ProcessKeyPreview(Message)
预览键盘消息。
ProcessMnemonic(Char)
处理助记键字符。
RaiseDragEvent(Object, DragEventArgs)
引发适当的拖动事件。
RaiseKeyEvent(Object, KeyEventArgs)
引发适当的键事件。
RaiseMouseEvent(Object, MouseEventArgs)
引发适当的鼠标事件。
RaisePaintEvent(Object, PaintEventArgs)
引发适当的绘画事件。
RecreateHandle()
强制为控件重新创建句柄。
RectangleToClient(Rectangle)
计算指定屏幕矩形的大小和位置(以工作区坐标表示)。
RectangleToScreen(Rectangle)
计算指定工作区矩形的大小和位置(以屏幕坐标表示)。
Refresh()
强制控件使其工作区无效并立即重绘自己和任何子控件。
RescaleConstantsForDpi(Int32, Int32)
发生 DPI 更改时,提供用于重新缩放控件的常数。
ResetBackColor()
将 BackColor 属性重置为其默认值。
ResetBindings()
使绑定到 BindingSource 的控件重新读取列表中的所有项,并刷新这些项的显示值。
ResetCursor()
将 Cursor 属性重置为其默认值。
ResetFont()
将 Font 属性重置为其默认值。
ResetForeColor()
将 ForeColor 属性重置为其默认值。
ResetImeMode()
将 ImeMode 属性重置为其默认值。
ResetMouseEventArgs()
重置控件以处理 MouseLeave 事件。
ResetRightToLeft()
将 RightToLeft 属性重置为其默认值。
ResetText()
将 Text 属性重置为其默认值 (Empty)。
ResumeLayout()
恢复正常的布局逻辑。
ResumeLayout(Boolean)
恢复正常的布局逻辑,可以选择强制对挂起的布局请求立即进行布局。
RtlTranslateAlignment(ContentAlignment)
将指定的 ContentAlignment 转换为相应的 ContentAlignment 以支持从右向左的文本。
RtlTranslateAlignment(HorizontalAlignment)
将指定的 HorizontalAlignment 转换为相应的 HorizontalAlignment 以支持从右向左的文本。
RtlTranslateAlignment(LeftRightAlignment)
将指定的 LeftRightAlignment 转换为相应的 LeftRightAlignment 以支持从右向左的文本。
RtlTranslateContent(ContentAlignment)
将指定的 ContentAlignment 转换为相应的 ContentAlignment 以支持从右向左的文本。
RtlTranslateHorizontal(HorizontalAlignment)
将指定的 HorizontalAlignment 转换为相应的 HorizontalAlignment 以支持从右向左的文本。
RtlTranslateLeftRight(LeftRightAlignment)
将指定的 LeftRightAlignment 转换为相应的 LeftRightAlignment 以支持从右向左的文本。
缩放控件和任何子控件。
Scale(Single, Single)
已过时。
缩放整个控件和任何子控件。
Scale(SizeF)
按指定的比例因子缩放控件和所有子控件。
ScaleBitmapLogicalToDevice(Bitmap)
发生 DPI 更改时,可以将逻辑位图值缩放到其等效设备单元值。
ScaleControl(SizeF, BoundsSpecified)
缩放控件的位置、大小、空白和边距。
ScaleCore(Single, Single)
执行缩放整个面板和任何子控件的工作。
ScrollControlIntoView(Control)
将指定的子控件滚动到支持自动滚动的控件的视图中。
(继承自 ScrollableControl)
ScrollToControl(Control)
计算到指定子控件的滚动偏移量。
(继承自 ScrollableControl)
Select()
激活控件。
Select(Boolean, Boolean)
激活子控件。 还可以指定从中选择控件的 Tab 键顺序的方向。
SelectNextControl(Control, Boolean, Boolean, Boolean, Boolean)
激活下一个控件。
SendToBack()
将控件发送到 Z 顺序的后面。
SetAutoScrollMargin(Int32, Int32)
设置自动滚动边距的大小。
(继承自 ScrollableControl)
SetAutoSizeMode(AutoSizeMode)
设置一个值,该值指示当启用控件的 AutoSize 属性时控件的行为方式。
SetBounds(Int32, Int32, Int32, Int32)
将控件的边界设置为指定位置和大小。
SetBounds(Int32, Int32, Int32, Int32, BoundsSpecified)
将控件的指定边界设置为指定位置和大小。
SetBoundsCore(Int32, Int32, Int32, Int32, BoundsSpecified)
执行设置该控件的指定边界的工作。
SetCellPosition(Control, TableLayoutPanelCellPosition)
设置表示单元格的行号和列号的 TableLayoutPanelCellPosition。
SetClientSizeCore(Int32, Int32)
设置控件的工作区的大小。
SetColumn(Control, Int32)
设置指定子控件的列位置。
SetColumnSpan(Control, Int32)
设置子控件跨的列数。
SetDisplayRectLocation(Int32, Int32)
将显示窗口定位到指定的值。
(继承自 ScrollableControl)
SetRow(Control, Int32)
设置指定子控件的行位置。
SetRowSpan(Control, Int32)
设置子控件跨的行数。
SetScrollState(Int32, Boolean)
设置指定的滚动状态标志。
(继承自 ScrollableControl)
SetStyle(ControlStyles, Boolean)
将指定的 ControlStyles 标志设置为 true 或 false。
SetTopLevel(Boolean)
将控件设置为顶级控件。
SetVisibleCore(Boolean)
将控件设置为指定的可见状态。
Show()
向用户显示控件。
SizeFromClientSize(Size)
确定整个控件(从控件工作区的高度和宽度起计算)的大小。
SuspendLayout()
临时挂起控件的布局逻辑。
ToString()
返回此控件的字符串表示形式。
(继承自 Panel)
Update()
使控件重绘其工作区内的无效区域。
UpdateBounds()
用当前大小和位置更新控件的边界。
UpdateBounds(Int32, Int32, Int32, Int32)
用指定大小和位置更新控件的边界。
UpdateBounds(Int32, Int32, Int32, Int32, Int32, Int32)
用指定大小、位置和工作区的大小更新控件的边界。
UpdateStyles()
强制将分配的样式重新应用到控件。
UpdateZOrder()
按控件的父级的 Z 顺序更新控件。

总结

这篇文章虽然很简单,但是也是可以学到东西的,我们学习了新的控件,对我们的知识储备及技术又有新的一点点的进步,C#的技术就是先简单再难嘛,积少成多之后才会成长才会进步,我们要不断的学习不断的探索,才能有学习的动力,才会有学习的欲望,创作不易,点赞评论收藏关注,嘿嘿,不喜勿喷!!!!

haoping21111.gif