![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Winform
文章平均质量分 63
lijingguang
这个作者很懒,什么都没留下…
展开
-
要使 WinForms(Windows Forms)应用程序识别高 DPI 分辨率并正确缩放显示元素
要使 WinForms(Windows Forms)应用程序识别高 DPI 分辨率并正确缩放显示元素,可以通过配置应用程序清单文件和应用程序配置文件来实现。通常,WinForms 应用程序会自动处理大多数 DPI 变化,但在某些情况下,您可能需要手动调整控件大小和字体。通过以上配置和代码设置,您的 WinForms 应用程序将能够识别和处理高 DPI 分辨率,从而在高分辨率显示器上正确缩放和显示用户界面元素。1. 如果项目中没有 `app.config` 文件,请添加一个。原创 2024-06-14 17:18:11 · 485 阅读 · 0 评论 -
使用Visual Studio 分析.NET Dump
内存泄漏和高CPU使用率是在日常开发中经常遇到的问题,它们可能会导致应用程序性能下降甚至崩溃。今天我们来讲讲如何使用Visual Studio 2022分析.NET Dump,快速找到程序内存泄漏问题。Dump文件又叫内存转储文件或者叫内存快照文件。用于存储程序运行时的状态信息的文件,这些文件通常包含了程序运行时的内存内容、线程信息、堆栈调用信息、异常信息等数据。Dump文件可以在程序崩溃、失去响应、资源消耗过高或者性能不理想等情况下生成,以帮助开发人员进行故障排查和调试。原创 2024-06-05 10:23:11 · 423 阅读 · 0 评论 -
WinForm使用Costura.Fody打包编译成可独立运行的桌面程序
5.接着,清理一下,然后重新生成,再看看输出文件夹里,是否减少了dll依赖文件,一个可执行的桌面程序绿色版本就这样弄出来了,无需安装,直接运行,方便分享程序给他人使用。7.再把复制到的一些文件,设置包括到项目中,然后修改属性生成操作为嵌入的资源。最后,确定一下是否会打包编译成可独立运行的桌面程序,打开项目里的目录。如果没有看到FodyWeavers.xml文件,那就自己手动添加。,根据你编译的运行环境选择,把生成的依赖文件复制那文件夹里面。下看看,如下图所示,所有依赖的。都打包在一个exe可执行程序里。原创 2024-03-22 10:11:26 · 664 阅读 · 0 评论 -
什么是委托,委托的本质是什么?
跟方法有点类似,有参数,返回值,访问修饰符+delegate --委托--特殊的方法?委托的本质是什么?是方法吗?反编译试试:发现定义的委托-----再CustomDelegate ----有对应的class委托的本质是什么?---Class(类),继承自一个MulticastDelegate的特殊类,自己在定义类的时候,是无法继承的。包含的有构造函数和方法。委托既然是一个类---怎么使用这个类?new ---调用方法/属性");x = 100;");x = 100;原创 2024-03-19 16:10:34 · 497 阅读 · 0 评论 -
CSharp的lambda表达式匿名类扩展方法
C#是强类型语言(编译时决定类型),object是在编译时确定类型,因为Object没有Id等属性,所以无法通过.去访问其中的变量.本质上来说,其实就是一个方法--匿名方法, 在类里面会生成和lambad 表达式参数和返回值完全匹配的方法.关键字去避开了编译器的检查,会在运行时检查,运行时决定类型.这个出现乱取的问题,导致程序崩溃.注意:扩展object类型.期望:既可以增加新的功能,历史代码不变.直接增加类,在新的类中去完成.有什么方法可以正确的取出想访问的属性,又可以避免访问不存在的属性那?原创 2024-03-19 15:28:12 · 721 阅读 · 0 评论 -
搞懂.NET应用程序管理员权限:三种简单方法一网打尽
NET应用程序以管理员身份运行的方法包括修改清单文件、项目文件,或在运行时动态请求管理员权限。清单文件和项目文件通过声明UAC请求,而动态请求管理员权限则在程序启动时检查并重新启动。选择适当的方法取决于项目需求和配置。在.NET应用程序中强制以管理员身份运行,可以通过清单文件、项目文件或者在程序运行时动态请求管理员权限。原创 2024-03-19 09:47:03 · 566 阅读 · 0 评论 -
掌握C#中的GUI多线程技巧:WinForms和WPF实例详解
本指南详细解释了在C#中如何在创建控件的线程以外的线程中访问GUI。基础功能使用`Control.Invoke`(WinForms)或`Dispatcher.Invoke`(WPF),高级功能则利用`SynchronizationContext`实现线程间通信,确保代码清晰可读。在C#中,要在创建控件的线程以外的线程访问控件,可以使用Control.Invoke(WinForms)或Dispatcher.Invoke(WPF)。以下是详细的步骤和示例代码,包括基础功能和高级功能。原创 2024-03-19 09:35:48 · 803 阅读 · 0 评论 -
在C#中如何避免内存泄漏
在C#中避免内存泄漏的关键是有效地管理对象的生命周期,确保不再需要的对象能够被垃圾回收器正确地释放。以下是一些在C#中避免内存泄漏的常见做法原创 2024-02-02 15:16:59 · 745 阅读 · 0 评论 -
线程启动停止暂停
get {set}));//启动ThMethod();while(!Current++;//停止//暂停mr.Reset();//继续mr.Set();原创 2024-01-27 15:22:35 · 378 阅读 · 0 评论 -
深入浅出C#消息
事件是对象发送的消息,以发送信号通知操作的发生。它再根据消息的类型调用默认的消息响应函数(如OnMouseDown),默认的响应函数然后根据对象的事件字段(如this.MouseDown )中的函数指针列表,调用用户所加入的响应函数(如Form1_MouseDown1和Form1_MouseDown2),而且调用顺序和用户添加顺序一致。结果,我们的两个函数Form1_MouseDown1、Form1_MouseDown2在我们单击鼠标左键的时候都会被调用,而且调用的顺序和我们添加委托的顺序一致。原创 2023-11-21 18:21:51 · 458 阅读 · 0 评论 -
C# 正则表达式大全
所要匹配的字符串</param>/// <param name="objString">所要匹配的字符串</param>/// <param name="objString">所要匹配的字符串</param>/// <param name="objString">所要匹配的字符串</param>/// <param name="objString">所要匹配的字符串原创 2023-11-18 14:45:40 · 283 阅读 · 0 评论 -
C#word(2007)操作类
/页面垂直对齐方式。//wdinfootnoteendnotepane 如果指定的所选内容或区域位于页面视图的脚注或尾注区内,或者位于普通视图的脚注或尾注窗格中,则本参数返回 true。//wdhorizontalpositionrelativetotextboundary 返回指定的所选内容或区域相对于周围最近的正文边界的左边的水平位置,以磅为单位。//wdverticalpositionrelativetopage 返回所选内容或区域的垂直位置,即所选内容的上边与页面的上边之间的距离,以磅为单位。原创 2023-11-14 17:07:48 · 728 阅读 · 0 评论 -
Invoke和BeginInvoke的真正含义
而所谓的“一面响应操作,一面添加节点”永远只能是相对的,使 UI 线程的负担不至于太大而以,因为界面的正确更新始终要通过 UI 线程去做,我们要做的事情是在工作线程中包揽大部分的运算,而将对纯粹的界面更新放到 UI 线程中去做,这样也就达到了减轻 UI 线程负担的目的了。再看看运行结果,弹出的对话框中显示的还是 UIThread,这说明什么?看看运行结果,弹出的对话框中显示的是 UIThread,这说明 BeginInvoke 所调用的委托根本就是在 UI 线程中执行的。原创 2023-11-14 16:47:07 · 122 阅读 · 0 评论 -
Control的Invoke和BeginInvoke
A在UI线程上执行----->beginInvokeThread线程开始执行,UI继续执行代码段B,并发地invokeThread执行代码段C-------------->不管UI有没有执行完代码段B,这时beginInvokeThread线程把消息封送给UI,单自己并不等待,继续向下执行-------->UI处理完butBeginInvoke_Click消息后,处理beginInvokeThread线程封送过来的消息。A----------->B--------------->C慎重,这个只做参考。原创 2023-11-14 15:58:51 · 118 阅读 · 0 评论 -
在C#中创建全局热键
在这个示例中,我们定义了一个`GlobalHotkey`类,该类封装了注册和处理全局热键的逻辑。我们在`MainForm`构造函数中注册热键,并指定触发热键时执行的操作。`GlobalHotkey`类负责在应用程序中全局注册和处理热键。在C#中,您可以使用Windows API的`RegisterHotKey`函数来创建全局热键。// Windows键。// 注册全局热键 (Ctrl + F1) 并定义触发时要执行的操作。原创 2023-11-07 17:32:12 · 981 阅读 · 0 评论 -
C# 全局热键和键盘钩子都用于监听和响应按键事件,但它们有不同的用途和实现方式
**用途**:键盘钩子用于全局地监视和拦截键盘事件,无论哪个应用程序正在运行,以便进行更底层的键盘事件处理,例如记录按键、截取按键等。键盘钩子是系统范围的,可以在所有应用程序中拦截和处理键盘事件。- **用途**:全局热键通常用于应用程序内的用户界面操作,而键盘钩子用于更底层的事件拦截和处理,如按键记录或安全性需求。- **范围**:全局热键是应用程序级别的,只在运行的应用程序中有效。- **权限**:键盘钩子通常需要更高的权限,因为它们可以被滥用来监视用户的输入,所以在实施时需要小心。原创 2023-11-07 17:30:52 · 1285 阅读 · 0 评论 -
使用 PDFView4NET 提供的方法来旋转页面
要旋转 PDF 文件,你可以使用 PDFView4NET 提供的方法来旋转页面。上述代码中,首先加载了一个 PDF 文件,然后选择要旋转的页面,并使用 `Rotate` 方法来旋转页面。最后,保存修改后的 PDF 文件并释放资源。请确保将你的 PDF 文件替换成实际的文件路径,并根据需要修改页面索引和旋转角度。// 旋转页面,可以传入角度参数,例如90度表示顺时针旋转90度。// 获取要旋转的页面索引,这里假设要旋转第一页,索引从0开始。// 保存修改后的 PDF 文件。// 选择要旋转的页面。原创 2023-11-03 13:56:46 · 241 阅读 · 0 评论 -
WinForms中使用DataGridView控件绑定数据并支持点击表头排序
/ 订阅ColumnHeaderMouseClick事件以处理排序。// 将DataGridView绑定到BindingList。// 将BindingList中的数据复制到一个List中。// 清空BindingList并将排序后的数据添加回去。// 创建一个BindingList并将数据复制到其中。// 根据排序方向和属性名称进行排序。// 创建一个List作为数据源。// 获取当前排序状态。// 使用反射获取属性值。原创 2023-10-17 15:07:14 · 806 阅读 · 0 评论 -
实例419 通过串口关闭对方计算机
下面主要介绍SerialPort类的DataReceived 事件,DataReceived 事件为本实例的主要使用技术。串行接收事件可以由 SerialData 枚举中的任何项引起,是否引发此事件由操作系统决定,所以不一定会报告所有奇偶校验错误。在网络应用程序中,主要通过网卡实现数据的传输,因此可以利用套接字技术实现远程关闭计算机。(2)在Form1窗体中,主要添加两个Button控件,分别用于打开通信串口和关闭对方计算机。注意:本实例从开发到测试,都是由本地计算机完成的,用户只需要使用跳线将串口的第。原创 2023-09-04 09:27:44 · 114 阅读 · 0 评论 -
实例418 通过串口发送数据
例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据传输到另一台计算机上,那么利用串口通信就可以实现。运行本程序,在“发送数据”文本框中输入要传送的数据,单击【发送】按钮,将传送的数据发送到所选择的端口号中;(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节。原创 2023-09-01 09:16:17 · 98 阅读 · 0 评论 -
实例048 向提示框中添加图标
在开发程序时,为了让用户熟悉操作,经常使用一些提示框,显示提示信息。默认情况下,提示信息框只包含提示信息,未免有些单调,如果在提示信息框中显示一个图标,程序或许就别具风格了。本实例实现了在提示框中添加图标的功能,实例运行结果如图1.49所示。要修改提示信息框的风格,首先需要了解C#中提示信息框的设计原理。ToolTip控件的ToolTipIcon属性可以设置提示时显示的图片,下面详细介绍一下该属性。属性用来获取或设置一个值,该值定义要在工具提示文本旁显示的图标的类型。根据本实例,读者可以实现以下功能。原创 2023-08-31 09:18:55 · 107 阅读 · 0 评论 -
实例047 如何为MDI类型窗体设置背景图片
窗体是一种应用非常广泛的窗体类型,在一个主窗体内包含多个子窗体,子窗体永远不会显示在主窗体的外面。当子窗体不能完全的显示在主窗体中时,主窗体会显示滚动条来调整可视范围,在其他开发环境中为MDI窗体添加背景图片十分困难。所有分配给该父窗体的MDI子窗体都在该父窗体的工作区内显示。(4)设置Form1窗体的IsMdiContainer属性为True,该窗口作为MDI主窗体。获取或设置一个值,该值指示窗体是否为多文档界面(MDI)子窗体的容器。(2)添加一个窗体,默认窗体的Name属性为Form2。原创 2023-08-30 09:19:38 · 347 阅读 · 0 评论 -
实例046 修改提示字体及颜色
如果设置了控件的ToolTip属性,当鼠标移到该控件后,会提示相关的文本,但没有提供对提示字体及颜色的设置属性,如何改变提示文本的样式和字体呢?中提供了ToolTip控件,可以指定关联控件并为每个控件提供提示文本,其中ToolTipTitle属性指定文本提示盒中的文本。该标题在窗口中作为一行粗体文本显示在标准的工具提示控件说明文本的上方。通常,标题只用于区分窗体上不同类别的控件,或作为较长控件说明的简介。使工具提示文本与指定的控件相关联。:指针位于控件上方时要显示的工具提示文本。提示时加提示的声音。原创 2023-08-29 09:08:25 · 271 阅读 · 0 评论 -
实例045 使用任意组件拖动窗体
用户准备拖动窗体时必须在控件上按住鼠标左键,所以应该在鼠标MouseDown事件处理过程中来实现窗体的拖动。当用户在按钮上将鼠标左键按下时,触发MouseDown事件,在该事件处理代码中,MouseEventArgs e的Button属性记录了当前按下的鼠标按钮,如果按键是鼠标左键,则表示可以移动窗口,鼠标移动时,窗体就可以跟着移动了。本例将会利用窗口中的控件拖动窗口,将鼠标放在按钮上然后按住鼠标左键移动鼠标即可拖动窗体。(2)在Form1窗体上添加两个Button控件,分别用来拖动窗体和关闭窗体。原创 2023-08-28 09:09:36 · 85 阅读 · 0 评论 -
实例044 在关闭窗口前加入确认对话框
用户对程序进行操作时,难免会有错误操作的情况,例如不小心关闭程序,如果尚有许多资料没有保存,那么损失将非常严重,所以最好使程序具有灵活的交互性。人机交互过程一般都是通过对话框来实现的,对话框中有提示信息,并且提供按钮让用户选择,例如【是】或【否】。窗口正要关闭但是没有关闭之前会触发FormClosing事件,该事件中的参数FormClosingEventArgs e中包含Cancel属性,如果设置该属性为True,窗口将不会被关闭。(1)创建一个项目,将其命名为Ex01_44,默认窗体为Form1。原创 2023-08-25 09:09:57 · 95 阅读 · 0 评论 -
实例043 如何实现Office助手
要实现Office助手效果,需要使用Microsoft提供的第3方控件。在工具箱中单击“选择项”,从弹出的对话框中选择COM组件选项卡中的Microsoft Agent Control 2.0组件并加入工具箱中,然后再添加到窗体中。用过Office的人都知道,Office助手是一个非常漂亮的小工具,有了它,即使对Office不太熟悉的用户也可以操作自如。本实例使用C#制作了一个类似Office助手的程序,实例效果如图1.44所示。(1)创建一个项目,将其命名为Ex01_43,默认窗体为Form1。原创 2023-08-24 09:41:02 · 100 阅读 · 0 评论 -
实例042 在窗口间移动按扭
窗体中每个可视控件都有所有者和父对象两个重要属性,所有者是控件建立时指定的所属对象,该对象可以是不可视控件,而父对象必须是可视控件。因此可以通过窗体中可视控件的Parent属性来判断控件是否在这个窗体中,还可以用Form.Controls.Add( )方法为窗体添加控件。本例以一个可以在窗口间移动的按钮来演示父对象改变后的运行效果。运行本例,在窗口中单击按钮,按钮就会移动到另外一个窗口中。可视控件包含一个Parent属性,该属性表示控件的父对象。(2)添加一个窗体,默认窗体的Name属性为Form2。原创 2023-08-23 09:11:56 · 69 阅读 · 0 评论 -
实例041 获取桌面大小
可以通过读取Screen对象的相关属性,来获取屏幕的信息,Screen.PrimaryScreen.WorkingArea.Width用于读取桌面宽度;获取桌面分辨率可以使用API函数GetDeviceCaps,但API函数参数较多,使用不方便,如何更方便的获取桌面分辨率呢?在本例中,通过读取Screen对象的属性,来获取桌面分辨率信息,以像素为单位。工作区是显示器的桌面区域,不包括任务栏、停靠窗口和停靠工具栏。(1)创建一个项目,将其命名为Ex01_41,默认窗体为Form1。,表示显示器的工作区。原创 2023-08-22 09:14:46 · 612 阅读 · 1 评论 -
实例040 限制窗体大小
窗体是可以随意改变大小的,然而对于一些要求严格的窗体,开发人员不希望用户随意的改变其大小,例如,定位准确的地图和游戏软件等。遇到这种情况必须对窗口的大小进行一些限制。本例设计一个限制了大小的窗体,用户虽然可以改变其大小,但是,大小的范围是受到限制的。实例效果如图1.40所示。在此C#中实现限制大小非常方便,只要设置窗体的最大和最小范围即可。(1)创建一个项目,将其命名为Ex01_27,默认窗体为Form1。,表示该窗体的最小大小。,表示该窗体的最大大小。在窗体显示时规定其大小。在窗体运行时规定其大小。原创 2023-08-21 09:23:24 · 78 阅读 · 0 评论 -
实例039 始终在最上面的窗体
桌面上允许多个窗体同时显示,但是只有一个窗体能够得到焦点,当一个窗体得到焦点后在其上面的窗体会被得到焦点的窗体遮挡,得到焦点的窗体会显示在最上层,这样被覆盖的窗体就不能完全的显示给用户,如果该窗体中具有实时性和比较重要的信息时,需要该窗口始终在最上层。在其他开发环境中实现窗体始终在最上面比较复杂,但在C# 2.0中实现非常简单,只要将TopMost属性设为True即可。属性用来获取或设置一个值,指示该窗体是否应显示为最顶层窗体。(1)创建一个项目,将其命名为Ex01_39,默认窗体为Form1。原创 2023-08-17 19:19:33 · 430 阅读 · 0 评论 -
实例038 设置窗体在屏幕中的位置
设置窗体在屏幕中的位置,可以通过设置窗体的属性来实现。窗体的Left属性表示窗体距屏幕左侧的距离,Top属性表示窗体距屏幕上方的距离。在窗体中可以设置窗体居中显示,本例通过设置窗体的Left属性和Top属性可以准确设置窗体的位置。(2)在窗体上添加Label控件;添加Button控件用来设置窗体在屏幕上的位置。(1)创建一个项目,将其命名为Ex01_38,默认窗体为Form1。用Timer控件实时显示窗体位置。根据本实例,读者可以开发以下程序。根据分辨率的变化动态设置窗体位置。(3)主要程序代码。原创 2023-08-15 09:12:42 · 916 阅读 · 0 评论 -
实例037 没有标题栏可义改变大小的窗口
隐藏Windows窗口的标题栏之后,窗口只剩下一个客户区域,有点像Panel控件在窗口中的样子,而这样的窗口通常是不能够改变大小的。因为屏蔽其标题栏之后,窗口默认将边框也去除了,本例将用特殊的方法建立一个没有标题栏但是可以改变其大小的窗体。窗口的样式是在窗口建立时确定的,在C#中实现窗体没有标题栏但是可以改变大小的窗口,有一个巧妙的方法就是将窗体的Text属性设为空,同时将ControlBox属性设为False。在不同分辨率的显示器中如何正确显示窗体、如何设置窗体始终在最上面,这些都需要本节的技术。原创 2023-08-14 10:02:09 · 138 阅读 · 0 评论 -
实例036 使窗体标题栏文字右对齐
窗口标题栏中的文字是窗口的重要说明,该文字可以标示窗口的功能、状态或名称等信息,一般该文字是居左显示的,在本例中设计一个标题栏文字右对齐的窗口。在C# 2.0中实现这一功能非常容易,只需将窗体的RightToLeft属性设置为Yes即可。(1)创建一个项目,将其命名为Ex01_36,默认窗体为Form1。(3)设置RightToLeft属性为Yes。(2)为Form1窗体添加背景图片。控件使窗体标题栏的文字进行左右闪动。根据本实例,读者可以开发以下程序。制作窗体标题栏滚动播放图片的窗体。原创 2023-08-11 09:26:18 · 547 阅读 · 0 评论 -
实例035 动画形式的程序界面
在该实例中用到了Microsoft Animation Control 6.0(SP4)COM组件,所以要从工具箱“选择项”中将该组件添加到工具箱,然后继续将该组件从工具箱添加到窗体即可。在很多的程序界面中,都是以菜单或工具栏的形式显示窗体界面,这种显示方式是以静止状态显示的,界面不够生动。下面介绍一个以动画显示窗体界面的设计方法。(2)在Form1窗体添加PictureBox控件用来显示图片,添加Microsoft Animation Control 6.0 (SP4)COM组件用来播放动画。原创 2023-08-10 19:14:18 · 122 阅读 · 0 评论 -
实例034 直接在窗体上绘图
含有Graphics对象的控件都能够在其上进行绘图,很多软件就是通过Graphics对象来美化程序的主界面,因为窗体中含有Graphics对象,所以可以将窗体看作一个大画板,一个可以在上面绘图的特殊控件。本例设计了一个简单的绘图软件,该软件就利用了在窗体上绘图的方法,运行本软件可以在窗体上进行绘图。窗体中含有Graphics对象,使用该对象就能够完成大部分绘图功能,Graphics对象已经对Windows底层的一些绘图API进行了封装,使用起来比较方便。绘图方法用来绘制一条连接由坐标对指定的两个点的线条。原创 2023-08-10 09:30:25 · 107 阅读 · 0 评论 -
实例033 制作闪烁的窗体
系统中,当程序在后台运行时,如果某个窗口的提示信息需要用户浏览,该窗口就会不停的闪烁,这样就会吸引用户的注意。同样,如果在自己的程序中使某个窗口不停的闪烁就会吸引用户的注意。本例设计了一个闪烁的窗体,运行程序,单击【开始闪烁】按钮,窗体就会不停的闪烁,单击【停止】按钮,窗体就会停止闪烁。提供了一个API函数FlashWIndow,该函数可以使窗体闪烁一下。利用该函数只能使窗体闪烁一下,如果让窗口不停地闪烁,就需要用一个Timer控件每隔一段时间就调用该函数使窗体闪烁。:表示将要闪烁的窗体。原创 2023-08-09 09:44:02 · 504 阅读 · 0 评论 -
实例032 动画显示窗体
当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以拉伸的效果显示到用户的面前。提供了一个API函数Animate Window,该函数可以实现窗体的动画效果,AnimateWindow函数在C#中的声明如下。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。该标志可以在滚动动画和滑动动画中使用。原创 2023-08-07 11:20:20 · 112 阅读 · 0 评论 -
实例031 窗体中的滚动字幕
滚动字幕的效果其实就是改变了文字的位置,在窗体中显示一串文字最好的办法就是利用Label控件。将Label控件的位置改变就可以实现文字的位置变换,如果该控件的位置不断的向水平方向移动,就会实现文字的滚动效果。改变Label控件的水平位置可以通过改变Label控件的Left的值来实现。普通窗体中的文字位置都是固定的,一些窗体中需要让文字动起来,例如一些广告性较强的界面中需要做一些滚动的字幕。本例实现了一个具有滚动字幕效果的窗体,运行本例,单击【演示】按钮,看到窗口中的文字开始滚动。(3)主要程序代码。原创 2023-08-05 10:32:04 · 201 阅读 · 0 评论 -
实例030 窗口颜色的渐变
在程序设计时,可以通过设置窗体的BackColor属性来改变窗口的背景颜色。但是这个属性改变后整个窗体的客户区都会变成这种颜色,并且非常单调。如果窗体的客户区可以向标题栏一样能够体现颜色的渐变效果,那么窗体风格将会另有一番风味。该函数就是用3种不同的色值来返回一个颜色,而稍微的调整某一种颜色值就可以使整体的颜色发生细微的变化,在窗体中至上而下每行填充一种稍微调整后的颜色,这样整体看来就会产生渐变的效果。可以利用窗体的Graphics对象对窗体进行绘图,该对象可以完全操控窗体的客户区。返回值:此方法创建的。原创 2023-08-04 09:33:07 · 175 阅读 · 0 评论 -
实例029 半透明渐显窗体
很多专业软件在启动前都会显示一个说明该软件信息或用途的窗口,有的则是一个漂亮的启动界面,如Adobe公司的Acrobat。本例将实现一个半透明的渐显窗体,运行本软件会显示一个启动画面,并且画面会将完全透明慢慢到半透明的效果显示在用户面前。效果如图1.29所示。在其他开发环境中,实现窗体的半透明渐显需要调用API函数,实现非常困难,但在C# 2.0中,窗体提供了Opacit属性来设置窗体的透明度。(1)创建一个项目,将其命名为Ex01_29,默认窗体为Form1。可以使窗体为透明状态,只显示窗体上的控件。原创 2023-08-03 19:19:40 · 189 阅读 · 0 评论