基于.NET的Windows窗体编程之WinForms控件简介
<p>在前一篇文章《基于.NET的Windows窗体编程之WinForms入门简介》中,我们了解到了Windows窗体编程在如何创建程序,Form页面相关属性和事件,以及如何启动调试程序,今天继续介绍基于.NET的Windows窗体编程中的控件部分,控件是Windows窗体编程过程中常用且十分重要的内容,通过控件可以搭建起程序和用户沟通的桥梁,它不仅可以接收用户的输入,还可以向用户展示计算得到的结果。所以掌握常见控件的功能和用法,对于Windows窗体编程,将会起到事半功倍的效果。本文主要讲解控件的基础用法,仅供学习分享使用,如有不足之处,还请指正。</p><p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260329003445816-806777847.png"></p>
<p> </p>
<h1>控件概述</h1>
<p> </p>
<p>在.NET UI框架中,将一些常用的功能封装成独立的组件,它封装了组件晦涩难懂的创建过程以及用户界面功能,并且公开相应的属性,用于设置组件呈现形式,以及相应的事件委托,用于处理对用户操作的响应,这就是控件。Windows窗体控件是可复用的,每一个控件实例都表示一个内存中的对象。Windows 窗体不仅提供许多现成的控件,还提供用于开发自己的控件的基础结构。 可以合并现有控件、扩展现有控件或创作自己的自定义控件。</p>
<p> </p>
<h1>添加控件</h1>
<p> </p>
<p>在Visual Studio设计器中,添加控件主要有以几种形式:</p>
<p>1. 拖动控件添加:从工具箱中选择需要添加的控件,按住鼠标拖动到需要添加的Form窗体中指定位置,然后松开鼠标即可,如下所示:</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260325000737899-1341175669.gif"></p>
<p> </p>
<p>2. 双击控件添加:在工具箱中,选择需要添加的控件,然后双击鼠标,即可添加控件到Form窗体的上上角位置,并呈现选中状态,可以手动拖动控件到目标位置,如下所示:</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260325001308795-1994008505.gif"></p>
<p> </p>
<p>3. 绘图添加,首先在工具箱中选择需要添加的控件,然后在Form窗体中用鼠标拖动选择一个区域,会自动添加控件到Form窗体中,并按照拖动区域的大小填充,如下所示:</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260325001859507-1501075295.gif"></p>
<p> </p>
<p>4. 代码添加,可以在Form窗体的类文件中,通过编写代码进行动态添加,如下所示:</p>
<p> </p>
<pre class="language-csharp highlighter-hljs"><code>private void Form1_Load(object sender, EventArgs e)
{
Label label1 = new Label()
{
Text = "Hello World.",
Location = new Point(10, 10),
TabIndex = 10
};
TextBox textBox1 = new TextBox()
{
Location = new Point(10,30),
Width=100,
Height=20,
TabIndex = 11
};
this.Controls.Add(label1);
this.Controls.Add(textBox1);
}</code></pre>
<p> </p>
<p>通过调试运行程序,可以发现,控件已经添加到Form1窗体中,如下所示:</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260325002550503-1202808515.png"></p>
<p> </p>
<h1>控件分类</h1>
<p> </p>
<p>在Windows窗体开发中,控件要构建用户页面的基础,根据功能,大致可以分为以下几类:</p>
<p> </p>
<ul>
<li>基础控件:主要包含基础单一功能的控件,根据具体用途,又可以细分为以下几类:
<ul>
<li>按钮与选择:
<ul>
<li>Button 普通按钮,具备点击功能,</li>
<li>CheckBox 复选框,相同的组里面可以同时选择多个,如一个人可以有多个爱好。</li>
<li>RadioButton 单选按钮,相同的组里面同时只能选择1个,如一个人的性别只能是男或女。</li>
</ul>
</li>
<li>输入与显示:
<ul>
<li>TextBox 文本框,可以用于输入纯文本内容。</li>
<li>Label,只能用于显示文本,不可编辑。</li>
<li>RichTextBox,可以显示富文本,如加粗,斜体,以及图片等样式。</li>
<li>LinkLabel,用于显示带链接的文本。</li>
<li>MaskedTextBox,使用掩码区分正确和不正确的用户输入的文本框。</li>
</ul>
</li>
<li>列表与选择:
<ul>
<li>ComboBox,下拉列表框,只能有一个被选中。</li>
<li>ListBox 列表框。</li>
<li>ListView,带图标的列表视图。</li>
<li>TreeView 树状结果的列表。</li>
<li>CheckListBox,复选框列表。</li>
</ul>
</li>
<li>其他控件:
<ul>
<li>DateTimePicker,日期时间选择器。</li>
<li>MonthCalendar,月历控件。</li>
<li>PictureBox,图像控件。</li>
<li>NumbericUpDown,数值调节按钮。</li>
<li>ProgressBar,进度条。</li>
<li>ToolTip,工具悬停提示。</li>
<li>NotifyIcon,通常用于显示在后台运行的进程图标,并且大部分时间都不会显示用户界面。</li>
<li>WebBrowser,用于显示浏览器中的网页信息。</li>
<li>TrackBar,滑动条。</li>
<li>Chart,图表控件。</li>
</ul>
</li>
</ul>
</li>
<li>容器控件:容器控件类似一个容器,包含子控件列表,主要有:
<ul>
<li>Panel,用于分组和布局其他控件,支持滚动条。</li>
<li>GroupBox,带标题的容器,用于逻辑分组。</li>
<li>SplitContainer,可调整大小的分隔窗格,用于分栏布局。</li>
<li>TabControl,多标签页容器,切换不同内容区域。</li>
<li>FlowLayoutPanel,流式布局容器,自动排列子控件。</li>
<li>TableLayoutPanel,表格布局容器,支持行和列的定义。</li>
</ul>
</li>
<li>菜单和工具栏:主要用于显示菜单栏,工具栏,右键菜单等功能,主要有:
<ul>
<li>ContextMenuStrip,右键菜单</li>
<li>MenuStrip,主菜单</li>
<li>StatusStrip,状态栏</li>
<li>ToolStrip,工具栏</li>
<li>ToolStripContainer。</li>
</ul>
</li>
<li>打印:主要用于打印输出文档,主要有:
<ul>
<li>PageSetupDialog,用于设置在基于 Windows 的应用程序中打印的页面详细信息。</li>
<li>PrintDialog,用于选择打印机、选择要打印的页面,并确定基于 Windows 的应用程序中的其他打印相关设置。</li>
<li>PrintDocument,用于设置属性,这些属性描述在基于 Windows 的应用程序中要打印什么内容以及打印文档的能力。</li>
<li>PrintPreviewControl,用于显示 PrintDocument 打印时的预览效果。</li>
<li>PrintPreviewDialog,用于显示 PrintDocument 的打印效果。</li>
</ul>
</li>
<li>对话框:主要用于弹出框供用户选择内容,主要有:
<ul>
<li>ColorDialog,颜色选择对话框。</li>
<li>FolderBrowserDialog,文件夹浏览对话框。</li>
<li>FontDialog,字体选择对话框。</li>
<li>OpenFileDialog,打开文件对话框。</li>
<li>SaveFileDialog,保存文件对话框。</li>
</ul>
</li>
<li>数据:
<ul>
<li>BindingSource,可绑定数据源</li>
<li>DataGridView,表格数据展示与编辑。</li>
<li>DataList,数据绑定列表。</li>
<li>BindingNavigator,数据导航控件。</li>
</ul>
</li>
<li>组件:
<ul>
<li>BackgroundWorker,后台异步操作</li>
<li>ErrorProvider,输入验证提示</li>
<li>FileSystemWatcher,文件系统监控,比如文件的新增,修改,删除等操作。</li>
<li>HelpProvider,用于将 Windows 应用程序与 HTML Help 1.x 帮助文件(HTML Help Workshop 生成的 .chm 文件,或 .htm 文件)关联。</li>
<li>ImageList,用于存储图像,然后可由控件显示。</li>
<li>Process,表示进程操作。</li>
<li>Timer,后台定时任务。</li>
</ul>
</li>
<li>创建新控件,如果当前UI框架提供的默认控件无法满足需求,则可以根据需求创建新的控件,主要分为以下几种方式:
<ul>
<li>用户控件,此类控件又称为复合控件,它是将Windows提供的基础控件进行组合,实现特定的功能。然后再统一进行复用。</li>
<li>扩展控件,从任何现有的 Windows 窗体控件派生继承的控件,使用此方法,你可以保留 Windows 窗体控件的所有固有功能,然后通过添加自定义属性、方法或其他功能来扩展该功能。</li>
<li>自定义控件,通过从 Control 继承,从头开始充分创建一个控件。</li>
</ul>
</li>
</ul>
<p> </p>
<h1>控件布局</h1>
<p> </p>
<p>在.NET Windows 应用程序开发中,窗体中的控件位置不仅由控件确定,还由控件的父级确定。 主要有以下几种控件位置布局:</p>
<p><strong><span style="color: rgba(224, 62, 45, 1)">固定位置和大小</span></strong>:控件在父级上的位置由控件距离父级左上角的 Location 属性的值确定。 父级控件的左上角位置坐标为 <code>(x0,y0)</code>。 控件的大小由 Size 属性确定,表示控件的宽度和高度。当控件被添加到支持自动定位的父控件时,该控件的位置和大小会发生改变。 在这种情况下,可能无法手动调整控件的位置和大小,具体取决于父级的类型。</p>
<p><strong><span style="color: rgba(224, 62, 45, 1)">边距和填充</span></strong>:Margin 属性定义控件周围的空间,该空间使其他控件与控件的边框保持指定距离。Padding 属性定义控件内部的一段空间,用于将控件的内容(例如,其 Text 属性的值)保持在距控件边框一定的距离。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260328235234390-1508536631.png"></p>
<p> </p>
<p><strong><span style="color: rgba(224, 62, 45, 1)">停靠(Dock)</span></strong>,属性可设置控件的哪个边与父级的对应边对齐,以及如何在父级中调整控件的大小。Dock属性要一个枚举类型,它有5个值,设置后效果如下:</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260328235432366-404943585.png"></p>
<p> </p>
<p>当控件停靠时,容器会确定其应占用的空间,调整控件的大小并进行定位。 基于停靠样式,仍采用控件的宽度和高度。 例如,如果将控件停靠在顶部,则采用控件的 Height,但自动调整 Width。 如果将控件停靠在左侧,则采用控件的 Width,但自动调整 Height。控件的Location无法手动设置,因为停靠控件会自动设置位置。</p>
<p>控件的 <strong>Z-order</strong> 会影响停靠。 对停靠后的控件进行布局时将占用可用空间。 例如,如果控件首先被绘制并停靠在顶部,它就会占据容器的整个宽度。 如果下一个控件被停靠在左侧,则该控件的可用垂直空间较少。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260329000213746-1926538233.png"></p>
<p> </p>
<p>如果控件的 <strong>Z-order</strong> 倒置,停靠在左侧的控件将拥有更多的初始可用空间。 该控件使用容器的整个高度。 停靠在顶部的控件具有较少的水平空间。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260329000254431-1269061098.png"></p>
<p> </p>
<p>随着容器增大和缩小,停靠在容器上的控件将重新定位并调整大小,以保持其位置和大小处于适当状态。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260329000318049-417463778.png"></p>
<p> </p>
<p>如果多个控件停靠在容器的同一侧,则根据其 <strong>Z-order</strong> 将其堆叠。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260329000346717-127363117.png"></p>
<p> </p>
<p><strong><span style="color: rgba(224, 62, 45, 1)">锚点(Anchor)</span></strong>,通过定位控件,可将控件绑定到父级容器的一侧或多侧。 随着容器大小的变化,锚定子控件保持与定位端的距离。控件可以定位到一侧或多侧,不存在限制。 定位点由 Anchor 属性设置。</p>
<p> </p>
<p><img src="https://img2024.cnblogs.com/blog/1068941/202603/1068941-20260329000458019-1961867278.png"></p>
<p>以上就是《基于.NET的Windows窗体编程之WinForms控件简介》的全部内容,旨在抛砖引玉,一起学习,共同进步。</p>
</div>
<div id="MySignature" role="contentinfo">
<div id="AllanboltSignature">
<p style="border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 30px; font-family: 微软雅黑; font-size: 12px" id="PSignature">
<br>
<img alt="" src="https://images.cnblogs.com/cnblogs_com/hsiang/1154298/o_115f1cd8.jpg" width="80px" height="80px">
作者:老码识途
<br>
出处:http://www.cnblogs.com/hsiang/
<br>
本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
<br>关注个人公众号,定时同步更新技术及职场文章
<br><br>
</p>
</div><br><br>
来源:https://www.cnblogs.com/hsiang/p/19766717
頁:
[1]