WinForm——获取窗体或控件可见属性来达到隐藏时不动作的目的


前言

在工业项目中时常的在数据交互,数据变化时推送至UI层做出相应的界面变化。但有时当我们切换界面时或者界面隐藏时,我们并不希望它继续在后台活动(会影响UI显示、造成卡顿)。故做测试,结果如下。


一、获取窗体的可见状态(Visible)

Form f = new Form();
bool v = f..Visible();

通过窗体的Visible属性就可以设置获取当前的可见状态。

二、当控件内部判断时,想获取对应父窗体的可见状态时( FindForm())

Form f = this.FindForm();

可以返回控件的父窗体,再通过Visible属性来判断窗体是否可见。

三、当控件内部判断时,想获取对应父容器的可见状态时(Parent)

this.Parent.Visible;

当控件存放在Panel,GroupBox,Tabpag中时,可以通过控件Parent属性找到父容器,再通过Visible属性来判别是否可见。

### 实现WinForms应用程序中的控件自适应调整 为了使WinForms应用程序中的控件能够随着窗体大小的变化而自动调整其尺寸和位置,可以采用多种方法来实现这一目标。下面介绍几种常见的方式。 #### 使用`Anchor`属性设置控件的相对定位 通过设定控件的`Anchor`属性,可以使控件相对于容器边缘保持固定距离,在窗口缩放维持特定的比例关系[^3]: ```csharp public partial class Form1 : Form { public Form1() { InitializeComponent(); InitializePercentagePositioning(); } private void InitializePercentagePositioning() { var textBox = new TextBox(); textBox.Size = new Size(100, 30); textBox.Location = new Point(20, 20); textBox.Dock = DockStyle.None; textBox.Anchor = AnchorStyles.Left | AnchorStyles.Right; this.Controls.Add(textBox); } } ``` 这段代码创建了一个文本框,并将其锚定到了左侧和右侧边界上,这意味着当父级窗体宽度变化,该文本框也会相应拉伸压缩以匹配新的可用空间。 #### 应用`Dock`属性填充指定区域 除了`Anchor`外,还可以利用`Dock`属性控件占据整个客户区者某个方向上的全部剩余空间。例如,如果希望一个列表视图始终填满除顶部工具栏之外的所有空白部分,则可如下操作[^5]: ```csharp listView1.Dock = DockStyle.Fill; panelWithToolbar.Dock = DockStyle.Top; ``` 这样做的好处在于无需手动计算坐标偏移量以及宽高比例,简化了编程工作的同提高了界面响应速度。 #### 动态调整所有子控件的位置与大小 对于更复杂的场景下,可能需要遍历当前表单内的每一个组件并动态更新它们各自的几何参数。这通常是在重写窗体级别的事件处理器内完成,比如`OnResize()`函数内部执行相应的变换逻辑[^1]: ```csharp private void OnResize(object sender, EventArgs e) { foreach (Control control in Controls) { control.Location = new Point( Convert.ToInt32(control.Location.X * Width / 800), Convert.ToInt32(control.Location.Y * Height / 600)); control.Size = new Size( Convert.ToInt32(control.Size.Width * Width / 800), Convert.ToInt32(control.Size.Height * Height / 600)); } } ``` 上述片段展示了如何基于原始分辨率(此处假设为800x600像素)按比例重新分配各个元素的新坐标系数值;需要注意的是这种方法虽然直观易懂但却够灵活高效,因此仅适用于简单应用场合下的快速原型开发阶段。 #### 表布局面板(`TableLayoutPanel`)的应用实例 另一种更为推荐的做法是借助内置的支持网格划分功能的容器型控件——如`TableLayoutPanel`来进行更加精细且易于维护的设计模式。具体来说就是先定义好表格结构再向其中添加待管理的对象即可达到预期效果[^4]: ```xml <TableLayoutPanel ColumnCount="2" RowCount="1"> <ColumnStyle SizeType="Percent" Width="50%" /> <ColumnStyle SizeType="Percent" Width="50%" /> </TableLayoutPanel> ``` 接着把想要成对排列显示的一组多组部件放置于同的列/行单元格之中,并适当配置各自的方向锁定标志位(即`Anchor`),从而确保整体外观协调一致并且具备良好的交互体验特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值