定时器参考程序:https://blog.csdn.net/zzlwl/article/details/123429523?spm=1001.2014.3001.5502
https://blog.csdn.net/zzlwl/article/details/123429523?spm=1001.2014.3001.5502C#三种定时器_chinacodec的博客-CSDN博客_c#三种定时器
https://blog.csdn.net/chinacodec/article/details/104905795?utm_source=app&app_version=5.1.1&code=app_1562916241&uLinkId=usr1mkqgl919blen
零、一些定义调用与声明和初始化
AnimateImage image;
Bitmap mybmp;
Image mying;
SoundPlayer player = new SoundPlayer("bin/qiqi.wav");
System.Timers.Timer t200ms = new System.Timers.Timer(200);
delegate void t200msDo();
double sec, min, hour;
double secs, mins, hours;
float x0 = 500, y0 = 500, r = 500;
float xsec;
float ysec;
float xmin;
float ymin;
float xhour;
float yhour;
double sita = 6 * Math.PI / 180 / 5;
double sitamin = 6 * Math.PI / 180 / 300;
double sitahour = 30 * Math.PI / 180 / 18000;
public Form1()
{
InitializeComponent();
音乐暂停.Text = "Stop";
时间.Text = "暂停";
button1.Text = "小";
button2.Text = "大";
//GIF
image = new AnimateImage(Image.FromFile("bin/app.gif"));
image.OnFrameChanged += new EventHandler<EventArgs>(image_OnFrameChanged);
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
//表盘显示
mying = new Bitmap("bin/1.png"); //图片位置
mybmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); //图片大小
pictureBox1.Image = mybmp; //图片大小赋值给pictureBox
//贴图
var g = Graphics.FromImage(pictureBox1.Image);
g.DrawImage(mying, x0 - r, y0 - r, 2 * r, 2 * r);
pictureBox1.Refresh();
g.Dispose();
//
sec = 0;
min = 30;
hour = 3;
secs = sec / 60 * (2 * Math.PI) - Math.PI / 2;
mins = (double)(min + sec / 60) / 60 * 2 * Math.PI - Math.PI / 2;
hours = (double)(hour + (double)(min + sec / 60) / 60) / 12 * 2 * Math.PI - Math.PI / 2;
t200ms.Elapsed += new System.Timers.ElapsedEventHandler(t200msOut);
t200ms.AutoReset = true;
t200ms.Enabled = false;
t200ms.Start();
//player.Play();
player.PlayLooping();
}
一、音频播放
1、添加命名空间
using System.Media;
2、实例化SoundPlayer类
这里音频文件格式只能是.wav,存放位置:WindowsFormsApp\bin\Debug\netcoreapp3.1文件夹下。
SoundPlayer player = new SoundPlayer("qiqi.wav");
3、使用新线程播放.wav文件
player.Play();//播放
player.Stop();//停止
player.PlayLooping();//循环播放
二、添加背景图
1、添加命名空间
using System.Drawing.Imaging;
2、表盘显示
//表盘显示
mying = new Bitmap("bin/1.png"); //图片位置
mybmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); //图片大小
pictureBox1.Image = mybmp; //图片大小赋值给pictureBox
//贴图
var g = Graphics.FromImage(pictureBox1.Image);
g.DrawImage(mying, x0 - r, y0 - r, 2 * r, 2 * r);
pictureBox1.Refresh();
g.Dispose();
三、定时器
详情参考上面链接
System.Timers.Timer t200ms = new System.Timers.Timer(200);
delegate void t200msDo();
t200ms.Elapsed += new System.Timers.ElapsedEventHandler(t200msOut);
t200ms.AutoReset = true;
t200ms.Enabled = false;
t200ms.Start();
public void t200msOut(object source, System.Timers.ElapsedEventArgs e)
{
Invoke(new t200msDo(t200msInvoke));
}
void t200msInvoke()
{
//这里面是定时器里面定时执行的内容
t200ms.Start();
}
四、定时器内部函数
void t200msInvoke()
{
var graph = this.pictureBox1.CreateGraphics();
var green = new Pen(Color.Green, 2);
var blue = new Pen(Color.Blue, 4);
var blues = new Pen(Color.Blue, 6);
secs = secs + sita;
mins = mins + sitamin;
hours = hours + sitahour;
if (secs > 2 * Math.PI) secs -= Math.PI * 2;
if (mins > 2 * Math.PI) mins -= Math.PI * 2;
if (hours > 2 * Math.PI) hours -= Math.PI * 2;
xsec = (float)(Math.Cos(secs) * r + x0);
ysec = (float)(Math.Sin(secs) * r + y0);
xmin = (float)(Math.Cos(mins) * r + x0);
ymin = (float)(Math.Sin(mins) * r + y0);
xhour = (float)(Math.Cos(hours) * r / 2 + x0);
yhour = (float)(Math.Sin(hours) * r / 2 + y0);
pictureBox1.Refresh();
graph.DrawLine(green, x0, y0, xsec, ysec);
graph.DrawLine(blue, x0, y0, xmin, ymin);
graph.DrawLine(blues, x0, y0, xhour, yhour);
t200ms.Start();
}
五、各按键功能
1、textBox文本框输入
输入时间;更改时间。
private void button1_Click(object sender, EventArgs e)
{
if (时间.Text.Equals("暂停"))
{
时间.Text = "开始";
t200ms.Stop();
}
else
{
时间.Text = "暂停";
if (textBox1.Text == "" && textBox2.Text == "" && textBox3.Text == "")
{
MessageBox.Show("请输入:时 分 秒");
}
else
{
//MessageBox.Show(textBox3.Text.Substring(1).ToString());
sec = Convert.ToInt16(textBox3.Text.Substring(2));
min = Convert.ToInt16(textBox2.Text.Substring(2));
hour = Convert.ToInt16(textBox1.Text.Substring(2));
secs = sec / 60 * (2 * Math.PI) - Math.PI / 2;
mins = (double)(min + sec / 60) / 60 * 2 * Math.PI - Math.PI / 2;
hours = (double)(hour + (double)(min + sec / 60) / 60) / 12 * 2 * Math.PI - Math.PI / 2;
textBox1.Text = "时:";
textBox2.Text = "分:";
textBox3.Text = "秒:";
t200ms.Start();
}
}
Invalidate();
}
2、控制音乐停止与播放与Gif图暂停与播放
private void 音乐暂停_Click(object sender, EventArgs e)
{
if (音乐暂停.Text.Equals("Stop"))
{
image.Stop();
player.Stop();
音乐暂停.Text = "Play";
}
else
{
image.Play();
//player.Play();
player.PlayLooping();
音乐暂停.Text = "Stop";
}
Invalidate();
}
3、控制表盘大小变化
private void button1_Click_1(object sender, EventArgs e)
{
r--;
var g = Graphics.FromImage(pictureBox1.Image);
pictureBox1.Refresh();
g.DrawImage(mying, x0 - r, y0 - r, 2 * r, 2 * r);
g.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
r++;
var g = Graphics.FromImage(pictureBox1.Image);
pictureBox1.Refresh();
g.DrawImage(mying, x0 - r, y0 - r, 2 * r, 2 * r);
g.Dispose();
}
六、运行图