MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

这篇具有很好参考价值的文章主要介绍了MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你是否也有这样的疑惑,当窗口拖拽之后,要如何才能填补右侧和下方的空缺?MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

有些人直接固定窗体大小,不允许用户拖拽。。。

也有萌新直接问我,MaterialSkin里面没有什么办法能让拖拽的时候,控件也跟着动吗?

其实这些功能在系统的Panel里面早就有了,只是大家不知道或者不会用而已。

 就在工具栏的“容器”这一栏目,别看就这几个控件,其实能解决大部分的布局问题。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

下面看看使用布局之后的软件是什么样子的:

正常:MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

缩小:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 放大:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

这属于放大的超级大了哈,比较一下可以看到,右下角的几个开关控件,从两列变为一列又变为三列,这是FlowLayoutPanel的功能。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

而这几幅图中,左侧文本部分和右侧按钮部分始终保持着一比一的比例进行缩放的,这是SpliteContainer的功能。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 而四个按钮之间,各自维持着一定的间距,还能一起变大变小,这是使用了两行两列的TableLayoutPanel

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

具体还涉及到了什么情况需要用到哪种Panel,如何嵌套使用,如何设置填充、停靠、设置间距属性等内容,东西比较多,大家可以新创建一个项目,一步一步来跟着做,我也拿一个空白窗体来演示。

1.TableLayoutPanel

拖出来是这样子滴,跟表格一样,可以点击右上角的小三角添加行或者列

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 我们添加一行一列,并拖拽他们的间距,可以让其显示为一个九宫格。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

看上去已经很完美了,但是当拖动右下角,拉大这个TableLayoutPanel时,发现新添加的行和列的大小没有随之变化。表格之间又变得不均匀了。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 这是因为新添加的行或列是默认以宽度(高度)数值为基准的,并不是比例的形式。

如果需要更准确的平分,需要点击小三角里面的最后一个选项  编辑行或列”  来进行详细设置。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 从这个样式表中,我们可以看到,第一列第二列都是50% ,这是比重的意思,而第三列是固定数值,这就是第三列不会改变大小的原因,我们把它也改成百分比类型,50%(这个比重可以随意写,总共超过100%也没关系,会被重新计算的)可以看到三列都是50% ,这就是1:1:1的形式。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 点击确定,可以看到三列已经被平分,我们用同样的方法,将行也平分三份

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 将显示切换到行,设置方法跟上面相同,TableLayoutPanel被分为完美的3*3方格,并且拖动方格,都是均匀变化,至此TableLayoutPanel就算是设置成功了。

接下来要往里面填充元素,这里我们用按钮来演示,将9宫格中,每个里面都放一个按钮。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

我们想要每个按钮占满一整个格子,这里介绍一个技巧,按住键盘Ctrl键,可以分别选中多个控件一起改属性,这里我们按住Ctrl键,鼠标将这9个按钮全部选中,更改这两个属性:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 AutuSize之前已经讲过,改为False,我们就可以更改按钮的大小,Dock设置为Fill意思即为填充满,更改过后,拖拽TableLayoutPanel可以发现每个按钮都会随之变大或变小。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

这里出现闪烁不要紧,因为是设计模式,真正运行时基本不会闪烁

同理我们选中TableLayoutPanel,更改它的属性,将Dock也设置为Fill,这样TableLayoutPanel就可以填充满整个窗体,随着窗体的变化而变化了。

运行一下程序,试着改变一下窗体大小看看吧。

 MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 整个窗体一直是被填满的状态,窗体变化,按钮也变化,这就是我们想要的效果!

这也是通过布局控制界面控件大小的基本原理,理解了下面就很简单啦。

接下来讲一些细节,比如我觉得按钮之间的间距太小,看起来太密集,怎么将他们之间的间距调大呢?

将所有按钮选中,然后更改他们的Margin属性,Margin属性四个值分别表示控件距离容器边缘左上右下的间距,我们把它全部改为10。可以看到间距发生了变化,间距更大了。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

当然如果想只改变左右的间距,就分别设置左右对应的Margin就可以了,按照左上右下的顺序,是第一位和第三位(你们应该都懂就不多说啦)

如果我想要一个按钮横跨多行或多列呢?类似于键盘的空格键和删除键一样。

将Button6、Button9删除,点击button3,到属性列表中找到布局->RowSpan

这是能够跨几行的意思,我们将其改为3,表示这个控件可以占用3行的空间

改完之后如图,最右边一列全是Button3的:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 同理,我们将Button8删除,点击Button7,将ColumnSpan 设置为2 ,这样Button7 就可以占用两列的空间。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 这样其实就无形之中给我们的布局分成了不同的功能区,我为了便于演示用的是按钮,把按钮换成功能组件,其实就是我们日常应用的软件了。这个TableLayoutPanel就相当于地基啦,正是因为它,各个组件才能自动跟随窗体改变大小的哦~

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

如果想做一个固定高度的底部状态栏或者菜单栏,类似于我们浏览器最下方的状态栏,是固定高度的,不会跟随窗体大小来变化。如下图:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 那也很简单,新增加一行,将高度设置为固定高度(非百分比形式)即可,一般默认就是这种形式,不需要多做修改。

然后将横跨几列的属性设置一下,将Dock设置为Fill,如下图所示,不管是长还是扁的,最下方状态条那里高度都不会变化。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

至此TableLayoutPanel的内容也就介绍的差不多了,剩下的功能大家在日常使用中自行体会,我也就不过多描述了。

2.SplitContainer

SplitContainer是一个用于界面分隔的控件,也会在布局中使用,其效果是将界面分为两部分。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 可以分成左右两部分或者上下两部分,同样的划分的比例也是可以调节的。

可以用在对布局要求不大的地方,比如像微信这样的聊天软件就基本上是左右布局,左边联系人,右边信息栏,布局简单,就可以使用SplitContainer。

可以嵌套使用,比如右边还想再分隔成上下两部分,就在右边的Panel中再拖入一个SplitContainer,如下图:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 不过SplitContainer一旦多了就会出现问题,就是选中的时候不好选中,经常选到的是里面的Panel,而不是外面的SplitContainer,这时就需要右键一下,手动选择SplitContainer。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

强烈建议大家使用的时候将每个Panel都命名一下,比如上图,时间久了,你根本不知道SplitContainer2到底指的是哪一个,就会很混乱。

正是因为各个Panel的名字比较混乱,一旦多了很不好管理,所以如果布局再复杂一些,就去用上面说的TableLayoutPanel

还是同样的,将SplitContainer的Dock设置为Fill,就能跟随窗体变化了。

3.FlowLayoutPanel

又称为流式布局,适合于重复的样式,如名片、菜单、订单等,我们只需要往里面添加控件,FlowLayoutPanel便会自行排列,如果空间够3列不够4列便会显示为3列,以此类推,将AutoScroll设置为TRUE,还会自动显示可以滚动条。

下图是我自行创建了UserControl之后,将其添加到FlowLayoutPanel中的效果。(你们可以自行在项目中添加UserControl)

其中我只绘制了名片部分,布局由FlowLayoutPanel自动完成。(FlowLayoutPanel的Dock属性设置为Fill)

UserControl内容:

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局 MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

添加 9个UserControl到FlowLayoutPanel中,由于现在的窗口比较小,所以自动显示为两列,由于只能显示6个,右侧自动出现滚动条。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

将窗体拖动,让窗体大小改变,FlowLayoutPanel便会自动显示为3列。

由于显示完全,滚动条自动消失。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 这种布局方式也是经常用的,需要熟知!

如果想在后台动态地添加控件到FlowLayoutPanel中,可以使用下面这段代码:

this.flowLayoutPanel1.Controls.Add(new UserControl1());

就可以在后台代码中增加自定义控件到FlowLayoutPanel中,如图,名片变成了10个。

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 使用起来是相当的方便和灵活的。

FlowLayoutPanel的功能也就是上面这些了,总的来讲还是相当强大的。

4.综合运用

能像我们之前写的侧边栏项目,使用了TabCotrol,我们就需要把布局的Panel放在相应的Tabpage里面。

这里先用了SplitContainer做了左右分隔,使左右两部分始终保持1:1比例的放大缩小。

左侧由于有三行,选择使用TableLayoutPanel,分为三行。

右侧上半部分,使用TableLayoutPanel分为两行两列,让按钮均匀放大缩小。

右下采用FlowLayoutPanel来让开关自适应排列

MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

 好了就说到这里吧,希望对大家有所帮助哦!文章来源地址https://www.toymoban.com/news/detail-462773.html

到了这里,关于MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用DockerUI结合内网穿透工具轻松实现公网访问和管理docker容器

    DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基于容器安装方式,部署方便高效,浏览和维护docker单节点或集群节点worker和manager。DockerUI具有易于使用的界面。它不需要记住 docker 指令。只需下

    2024年02月05日
    浏览(59)
  • 使用Portainer创建Nginx容器并部署本地网站结合内网穿透实现公网访问

    Portainer是一个开源的Docker轻量级可视化工具,它提供了一个直观的Web界面,让你轻松管理和监控Docker容器、镜像和网络等。之前在文章《Linux Docker 图形化工具 Portainer远程访问》中我们讲了如何使用Docker部署一个Portainer,并结合cpolar内网穿透实现了公网访问成功。本篇文章教

    2024年01月25日
    浏览(50)
  • 如何在Linux系统Docker部署Wiki.js容器并结合内网穿透实现远程访问本地知识库

    不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整理工具是非常重要的,今天推荐一款维基知识库系统——Wiki.js。 本文将介绍如何用 Docker 容器技术部署 Wiki.js 应用程序,并且结合cpolar发布至公网实

    2024年03月15日
    浏览(46)
  • 如何使用Docker本地部署Wiki.js容器并结合内网穿透实现知识库共享

    不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整理工具是非常重要的,今天推荐一款维基知识库系统——Wiki.js。 本文将介绍如何用 Docker 容器技术部署 Wiki.js 应用程序,并且结合cpolar发布至公网实

    2024年01月19日
    浏览(56)
  • Wpf基础入门——容器Panel篇

    一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。近似于HTML中的Table。 StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线

    2024年02月06日
    浏览(70)
  • 【Unity-UGUI控件全面解析】| Panel 容器组件详解

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作

    2024年02月02日
    浏览(40)
  • 使用Ubuntu系统搭建RabbitMQ服务并结合内网穿透实现公网访问

    RabbitMQ是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出,里面存放的内容

    2024年02月08日
    浏览(48)
  • 使用 LXCFS 文件系统实现容器资源可见性

    前言: Linux 利用 Cgroup 实现了对容器资源的限制,但是当在容器内运行 top 命令时就会发现,它显示的信息是宿主机的 CPU 和 内存数据,而不是当前容器的数据。造成这个问题的原因,就是因为 /proc 文件系统并不了解 Cgroup 限制的存在。 社区中常见的做法是利用 lxcfs 文件系统

    2023年04月17日
    浏览(21)
  • 如何在Ubuntu系统使用Docker搭建MongoDB结合内网穿透实现公网连接

    本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署MongoDB,并结合cpolar内网穿透工具实现公网远程访问本地数据库。 MongoDB服务端可以运行在Linux、Windows、MacOS平台,可以存储比较复杂的数据类型,支持的查询语言非常强大,几乎可以实现类似关系数据库单表查询的绝大部分

    2024年03月26日
    浏览(55)
  • Linux部署DockerUI结合内网穿透实现远程管理本地Docker容器

    DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基于容器安装方式,部署方便高效,浏览和维护docker单节点或集群节点worker和manager。DockerUI具有易于使用的界面。它不需要记住 docker 指令。只需下

    2024年03月20日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包