Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的。Timer组件也被封装在名称空间System.Windows.Forms中,其主要作用是当Timer组件启动后,每隔一个固定时间段,触发相同的事件。Timer组件在程序设计中是一个比较常用的组件,虽然属性、事件都很少,但在有些地方使用它会产生意想不到的效果。
其实要使得程序的窗体飘动起来,其实思路是比较简单的。首先是当加载窗体的时候,给窗体设定一个显示的初始位置。然后通过在窗体中定义的二个Timer组件,其中一个叫Timer1,其作用是控制窗体从左往右飘动(当然如果你愿意,你也可以改为从上往下飘动,或者其他的飘动方式。),另外一个Timer2是控制窗体从右往左飘动(同样你也可以改为其他飘动方式)。当然这二个Timer组件不能同时启动,在本文的程序中,是先设定Timer1组件启动的,当此Timer1启动后,每隔0.01秒,都会在触发的事件中给窗体的左上角的横坐标都加上"1",这时我们看到的结果是窗体从左往右不断移动,当移动到一定的位置后,Timer1停止。Timer2启动,每隔0.01秒,在触发定义的事件中给窗体的左上角的横坐标都减去"1",这时我们看到的结果是窗体从右往左不断移动。当移动到一定位置后,Timer1启动,Timer2停止,如此反覆,这样窗体也就飘动起来了。要实现上述思路,必须解决好以下问题。
(1).如何设定窗体的初始位置:
设定窗体的初始位置,是在事件Form1_Load()中进行的。此事件是当窗体加载的时候触发的。Form有一个DesktopLocation属性,这个属性是设定窗体的左上角的二维位置。在程序中是通过Point结构变量来设定此属性的值,具体如下:
//设定窗体起初飘动的位置,位置为屏幕的坐标的(0,240)
private void Form1_Load ( object sender , System.EventArgs e )
{
Point p = new Point ( 0 , 240 ) ;
this.DesktopLocation = p ;
}
(2). 如何实现窗体从左往右飘动:
设定Timer1的Interval值为"10",就是当Timer1启动后,每隔0.01秒触发的事件是Timer1_Tick(),在这个事件中编写给窗体左上角的横坐标不断加"1"的代码,就可以了,具体如下:
private void timer1_Tick(object sender, System.EventArgs e)
{
{ //窗体的左上角横坐标随着timer1不断加一
Point p = new Point ( this.DesktopLocation.X + 1 , this.DesktopLocation.Y ) ;
this.DesktopLocation = p ;
if ( p.X == 550 )
{
timer1.Enabled = false ;
timer2.Enabled = true ;
}
}
(3). 如何实现窗体从右往左飘动:
代码设计和从左往右飘动差不多,主要的区别是减"1"而不是加"1"了,具体如下:
//当窗体左上角位置的横坐标为-150时,timer2停止,timer1启动
private void timer2_Tick(object sender, System.EventArgs e)
{ file://窗体的左上角横坐标随着timer2不断减一
Point p = new Point ( this.DesktopLocation.X - 1 , this.DesktopLocation.Y ) ;
this.DesktopLocation = p ;
if ( p.X == - 150 )
{
timer1.Enabled = true ;
timer2.Enabled = false ;
}
}
三. 用Visual C#编写窗体飘动程序的源代码:
通过上面的介绍,不难写出窗体飘动的程序源代码。如下:
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
namespace floatingForm
{
public class Form1 : Form
{
private Timer timer1 ;
private Timer timer2 ;
private Label label1 ;
private Button button1 ;
private System.ComponentModel.IContainer components ;
public Form1 ( )
{
file://初始化窗体中的各个组件
InitializeComponent ( ) ;
}
file://清除在程序中使用过的资源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose( disposing ) ;
}
private void InitializeComponent ( )
{
this.components = new System.ComponentModel.Container ( ) ;
this.timer1 = new Timer ( this.components ) ;
this.timer2 = new Timer ( this.components ) ;
this.label1 = new Label ( ) ;
this.button1 = new Button ( ) ;
this.SuspendLayout ( ) ;
this.timer1.Enabled = true ;
this.timer1.Interval = 10 ;
this.timer1.Tick += new System.EventHandler ( this.timer1_Tick ) ;
this.timer2.Enabled = false ;
this.timer2.Interval = 10 ;
this.timer2.Tick += new System.EventHandler ( this.timer2_Tick ) ;
this.button1.Font = new Font ( "宋体" , 10 ) ;
this.button1.Location = new Point ( 1 , 8 ) ;
this.button1.Name = "button1" ;
this.button1.Size = new Size ( 80 , 25 ) ;
this.button1.TabIndex = 0 ;
this.button1.Text = "停止飘动" ;
this.button1.Click += new System.EventHandler ( this.button1_Click ) ;
this.label1.Font = new Font ( "宋体" , 22F , FontStyle.Bold , GraphicsUnit.Point , ( ( System.Byte ) ( 0 ) ) ) ;
this.label1.Location = new Point ( 8 , 38 ) ;
this.label1.Name = "label1" ;
this.label1.Size = new Size ( 344 , 40 ) ;
this.label1.TabIndex = 1 ;
this.label1.Text = "用Visual C#做的飘动的窗体!" ;
this.AutoScaleBaseSize = new Size ( 5 , 13 ) ;
this.ClientSize = new Size ( 352 , 70 ) ;
this.Controls.Add (this.label1 ) ;
this.Controls.Add (this.button1 ) ;
this.Name = "Form1" ;
this.Text = "用Visual C#做的飘动的窗体!";
this.Load += new System.EventHandler ( this.Form1_Load ) ;
this.ResumeLayout ( false ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
file://设定窗体起初飘动的位置
private void Form1_Load ( object sender , System.EventArgs e )
{
Point p = new Point ( 0 , 240 ) ;
this.DesktopLocation = p ;
}
file://当窗体左上角位置的横坐标为550时,timer1停止,timer2启动
private void timer1_Tick(object sender, System.EventArgs e)
{
file://窗体的左上角横坐标随着timer1不断加一
Point p = new Point ( this.DesktopLocation.X + 1 , this.DesktopLocation.Y ) ;
this.DesktopLocation = p ;
if ( p.X == 550 )
{
timer1.Enabled = false ;
timer2.Enabled = true ;
}
}
file://当窗体左上角位置的横坐标为-150时,timer2停止,timer1启动
private void timer2_Tick(object sender, System.EventArgs e)
{ file://窗体的左上角横坐标随着timer2不断减一
Point p = new Point ( this.DesktopLocation.X - 1 , this.DesktopLocation.Y ) ;
this.DesktopLocation = p ;
if ( p.X == - 150 )
{
timer1.Enabled = true ;
timer2.Enabled = false ;
}
}
file://停止所有的timer
private void button1_Click(object sender, System.EventArgs e)
{
timer1.Stop ( ) ;
timer2.Stop ( ) ;
}
}
}
四. 总结:
恰到好处的使用Timer组件往往会有出其不意的效果。由于本文的主要目的是介绍Timer组件的使用方法,程序功能还不是十分强大,感兴趣的读者,可以试着按照下面的思路进行修改,看看是否可以让窗体上下飘动,让窗体不定规则的飘动。当然如果你更有兴趣,也可以把窗体的边框和最大化、最小化等按钮给隐去,放一个好看的图片充满整个窗体,再让他飘动起来,这样效果就更令人惊讶了。
分享到:
相关推荐
在这个教程中,我们将深入探讨`Timer`组件的原理、使用方法以及如何将其应用到实际项目中。 1. **Timer组件概述** - `Timer`组件是.NET框架的一部分,提供了一种周期性触发事件的方式。它存在于`System.Timers`...
在C#编程中,`Timer`是一个非常常用的组件,它允许开发者在指定的时间间隔内触发一个事件。在本文中,我们将深入探讨`System.Timers.Timer`的使用以及如何解决可能出现的重入问题。 首先,`System.Timers.Timer`是...
在C#编程中,`Timer`控件是一个非常实用的组件,它允许程序在特定间隔内执行指定的任务。本教程将深入探讨如何使用`Timer`控件来显示实时的当前时间。 `Timer`控件是.NET框架中的一个控件,位于System.Windows....
在C#编程中,`Timer`控件是一个非常实用的组件,它允许程序在特定间隔执行指定的任务。本文将深入探讨如何使用C# `Timer`控件创建一个电子时钟,并将其应用于各种定时操作。 首先,`Timer`控件不是Windows Forms...
C#定时器(Timer)是.NET框架中一个非常重要的组件,它允许开发者在特定的时间间隔内执行特定的代码块,从而实现周期性的任务。在Windows应用程序、服务或控制台程序中,C#定时器常常被用来创建后台任务、监控、更新...
通过掌握Timer组件的使用和时间差计算方法,开发者可以轻松地在C#应用程序中实现倒计时功能,提升用户体验。在实际项目中,还可以考虑线程安全问题,优化性能,以及处理用户交互,如暂停、恢复或重置倒计时。总之,...
在`DisplayTimeEvent`方法中,我们使用`DateTime.Now`获取当前时间并将其打印到控制台。 ```csharp public static void DisplayTimeEvent(object source, ElapsedEventArgs e) { Console.Write(DateTime.Now); } `...
在.NET框架中,C# Timer控件是一种非常实用的组件,用于在应用程序中实现定时触发事件。本篇文章将深入探讨C# Timer控件的用法,包括如何使用它来控制背景音乐以及如何从子窗体影响父窗体的控件。 1. **C# Timer...
在本文中,我们将深入探讨如何在C#中使用时钟控件Timer以及如何通过Web服务接口(WebService)进行通信。这个实例特别适合初学者,它将帮助你理解这两个关键概念,并教你如何将它们结合起来实现一个实用的应用。 ...
在C#编程中,`Timer`对象是一个非常实用的组件,它允许开发者在特定间隔执行某项任务。在这个场景中,我们使用`Timer`来实现一个倒计时功能,并在倒计时过程中循环播放一段音乐。这个应用可能适用于游戏、定时提醒...
摘要:C#源码,系统相关,Timer,计时器 C#使用Timer组件制作计时器,以前用Timer写过倒计时、写过定时器以及在窗体上适时显示时间,今天这个包括了适时时间显示,同时还提供了定时功能,更好的将Timer组件的用法展现给...
在这个特定的场景中,我们关注的是C#中的一个关键组件:`System.Windows.Forms.Timer`,也被称为C# Timer。这个控件允许程序员在指定的时间间隔内触发事件,从而实现定时任务或者模拟时钟等功能。 标题中的“模拟时...
下面我们将详细讲解`Timer`组件的使用方法: 1. **引入命名空间**:首先,在C#源码文件中,我们需要引入`System.Windows.Forms`命名空间,因为`Timer`组件在这个命名空间内定义。添加以下语句: ```csharp using ...
本篇将深入探讨如何在C# WPF项目中使用`Timer`,以及相关的编程技巧。 1. **System.Windows.Threading.DispatcherTimer** WPF中的`DispatcherTimer`类来自于`System.Windows.Threading`命名空间,它与Windows ...
C#窗体中的Timer控件是一种非可视化控件,用于提供计时机制。它的主要属性包括Enabled、Interval等。其中,Enabled属性用于控制Timer控件是否启用,而Interval属性则用于设置时钟周期,单位为毫秒。Timer控件还提供...
3. **编写Tick事件处理程序**:在`Timer_Tick`方法中,切换图片并更新PictureBox的内容。同时,确保有适当的逻辑来控制图片的顺序,例如使用索引变量跟踪当前显示的图片。 ```csharp private int currentIndex = 0;...
在`timer1_Tick`方法中,代码检查了`counter`是否达到或超过10次,如果达到,则禁用timer并重置`counter`为0,从而结束循环。否则,它会执行相应的程序代码,增加`counter`的值,并更新`label1`的文本,显示已执行的...
### Asp.net中的Timer控件使用详解 #### 12.1 应用场景 - **定期更新**:适用于需要定期更新一个或多个`UpdatePanel`控件内容的场景,同时不需要刷新整个页面,这对于提高用户体验非常有帮助,因为用户在浏览其他...
本篇将深入探讨如何使用C#创建串口组件,实现独立线程进行数据接收和处理。 首先,我们需要了解C#中的`System.IO.Ports`命名空间,这是.NET Framework提供的用于串口通信的基础类库。在这个命名空间中,`SerialPort...
**一、C# Timer组件** 1. **System.Timers.Timer**:这是最常见的`Timer`类型,它适用于多线程环境,通过`Elapsed`事件触发周期性操作。使用时,需设置`Interval`属性来指定间隔时间,然后启动`Enabled`属性。 ```...