第一次发布程序资源贴,不足之处,还望多多指教。
C#的一个大好处就是界面做起来毫不费力,因此重点在于功能的实现,在这个小程序中,涉及到C#的不同窗体传参、传值,读取当前系统时间、读取程序运行了多长时间等等,在C#中对于网页(URL)有特别苛刻的要求,我的这个程序只考虑到了一小部分因素,因此,当输入非法链接的时候,程序有可能会报错。
另外,程序的倒数计时是我额外添加的一个timer组件,由于程序运行过程中,线程的不同步,倒数计时的时间可能会与实际时间不同步,
强迫症患者用这个软件可能会遭殃了
,对于这些问题,我会后续改进,然后发布更完美的后续版本。
如果你有任何问题,或者发现了程序的任何问题,请联系我:mail to me [EMAIL="zxyisc@foxmail.com"]
zxyisc@foxmail.com[/EMAIL]
本程序需要
Microsoft .net framework 4.0支持,如果你的电脑上没有安装,请到
这里下载安装。
程序界面:
【还在为Kx太少而担忧吗?还在为一段时间无操作就被论坛版主踢下线而烦恼么?试试网页自动刷新工具吧!】
诚然,很多浏览器都自带自动刷新的工具,或者开发一个插件便可实现的功能,我这也是只想试试检验一下自己的编程能力,看看能不能实现我心目中的功能,我这也是第一次正规地去编出一个实用型程序,还希望大家不吝赐教
。
主窗体实现代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Web;
using System.Runtime.InteropServices;
using System.Threading;
namespace AutoRefresh
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
// public void getid(string id) //text文本框传值法则1(代码1)
// {
// textBoxMainForm.Text = id;
// }
private void 开始ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void 关于AutoRefreshAToolStripMenuItem_Click(object sender, EventArgs e)
{
FormAbout f1 = new FormAbout();
f1.Size = new Size(400 , 200);
f1.Text="关于网页刷新器";
f1.FormBorderStyle = FormBorderStyle.FixedSingle;
f1.MinimizeBox = false;
f1.MaximizeBox = false;
f1.ShowIcon = false;
f1.Show();
}
private void 输入网址ToolStripMenuItem_Click(object sender, EventArgs e)
{
//FormNew formnew1=new FormNew();
//formnew1.FormBorderStyle = FormBorderStyle.FixedSingle;
//formnew1.Show();
FormNew form = new FormNew();
form.GetForm(this);
form.FormBorderStyle = FormBorderStyle.FixedSingle;
form.Show();
}
public void GetText(String text)
{
string value = text;
}
public void textBox2_TextChanged(object sender, EventArgs e)
{
}
public void textBoxMainForm_TextChanged(object sender, EventArgs e)
{
// String myurl = textBoxMainForm.Text;
// string myurl = textBoxMainForm.Text;
// webBrowser1.Url = new Uri(myurl.Trim());//加一个.trim去掉链接首尾空格
// webBrowser1.Url = new Uri(myurl);
webBrowser1.Url = new Uri(textBoxMainForm.Text);
}
private bool windowCreate = true;
private void 后台运行ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (windowCreate)
{
base.Visible = false;
windowCreate = false;
}
this.Hide();
base.OnActivated(e);
}
private void notifyIcon1_MouseDoubleClick_1(object sender, MouseEventArgs e)
{
//双击任务栏右侧通知区域的图标,程序的主窗口显示出来
if (e.Button == MouseButtons.Left) //如果双击的是鼠标左键,执行下列操作
{
if (this.Visible == true)
{
//this.Visible = false;
//this.ShowInTaskbar = false;
if (windowCreate) //调用后台运行的函数,隐藏所有窗口
{
base.Visible = false;
windowCreate = false;
}
this.Hide();
base.OnActivated(e);
}
else
{
this.Visible = true;
this.ShowInTaskbar = true;
}
}
if (e.Button == MouseButtons.Right) //如果双击的是鼠标右键,不执行任何操作
{
}
}
FormTime ft;
private void 刷新时间ToolStripMenuItem_Click(object sender, EventArgs e)
{
// FormTime ft = new FormTime(webBrowser1);//传参数到FormTime中去,使得FormTime可以调用FormMain的对象webbrowser
ft = new FormTime();
ft.GetForm(this);
ft.Show();
ft.FormBorderStyle = FormBorderStyle.FixedSingle;
if (textBoxMainForm.Text == "")
webBrowser1.Url = new Uri("http://www.hnu.edu.cn"); //为了防止无网页空刷新调用出错
// else return;
}
[DllImport("user32", EntryPoint = "HideCaret")]
private static extern bool HideCaret(IntPtr hWnd); //隐藏地址栏鼠标光标
private void textBoxMainForm_MouseDown(object sender, MouseEventArgs e)
{
HideCaret((sender as TextBox).Handle);
}
void textBoxMainForm_GotFocus(object sender, EventArgs e) //隐藏地址栏鼠标光标
{
HideCaret((sender as TextBox).Handle);
}
DateTime dtstart = DateTime.Now; //获取程序启动时的系统时间
public void FormMain_Load(object sender, EventArgs e) //当FormMain窗体运行时,要执行的操作
{
textBoxMainForm.GotFocus += textBoxMainForm_GotFocus; //隐藏地址栏鼠标光标
timercurrentTime.Start(); //显示当前系统时间的计时器开始计时
timerProgramRUN.Start(); //从程序运行的那一刻起开始计时,显示程序运行了多长时间
}
int timeRemaining;
private void textBox2_TextChanged_1(object sender, EventArgs e)
{
timerAutoF5.Interval = Convert.ToInt32(Convert.ToSingle(textBox2.Text) * 1000); //自动刷新的计时器的触发频率
daojishi.Interval = 1000; //设置倒计时器的触发频率是1s一次
timeRemaining = Convert.ToInt32(Convert.ToSingle(textBox2.Text)); //当时间的textbox值改变时,直接把值赋给timeRemaining
labelF5remain.Text = textBox2.Text; //令labelF5remain的值初始显示为所设置的刷新间隔时间
daojishi.Start(); //启动倒计时器,这里只是为了保证第一次就能正常计时
timerAutoF5.Enabled = true; //启动自动刷新计时器
//daojishi.Stop();
}
private void daojishi_Tick(object sender, EventArgs e)
{
//timeRemaining = Convert.ToInt32(Convert.ToSingle(textBox2.Text));
/*
* 将①放在②前面是为了使计时器从我们输入的值开始倒计时,而非输入的值减1开始倒计时
* 这个if判断语句的目的是使第一次刷新时,label值显示正常
*/
if (labelF5remain.Text == timeRemaining.ToString())
{
timeRemaining--; //②
labelF5remain.Text = timeRemaining.ToString(); //①
}
else
{
labelF5remain.Text = timeRemaining.ToString(); //①
timeRemaining--; //②
}
}
int f5account = 0; //【重要!!】记住,一定要在函数外面初始化f5account!
private void AutoF5_Tick(object sender, EventArgs e)
{
timeRemaining = Convert.ToInt32(Convert.ToSingle(textBox2.Text));
daojishi.Start(); //启动倒计时器
if(textBoxMainForm.Text=="")
webBrowser1.Navigate(new Uri("http://www.hnu.edu.cn")); //为了防止无网页的空刷新
else
webBrowser1.Navigate(new Uri(textBoxMainForm.Text));
f5account = f5account + 1; //在这里做一个计数器的,计算刷新次数
this.labelF5account.Text = f5account.ToString();
}
// public void shuaxinyemian()
// {
// if (textBoxMainForm.Text == "")
// webBrowser1.Navigate(new Uri("http://www.hnu.edu.cn")); //为了防止无网页的空刷新
// else
// webBrowser1.Navigate(new Uri(textBoxMainForm.Text));
// f5account = f5account + 1; //在这里做一个计数器的,计算刷新次数
//
// int nowaccount = f5account;
// this.labelF5account.Text = nowaccount.ToString();
// }
private void currentTime_Tick(object sender, EventArgs e)
{
DateTime dt = DateTime.Now; //实例化对象捕获系统当前时间
string t = dt.ToLongTimeString(); //将此实例的值转化为等效时间字符串值
this.LabelcurrentTime.Text = t;
}
public void timerProgramRUN_Tick(object sender, EventArgs e)
{
//System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
//sw.Start();
//int s = sw.Elapsed.Seconds;
//int m = sw.Elapsed.Minutes;
//int h = sw.Elapsed.Hours;
//string timerun=h+":"+m+":"+s;
DateTime dtnow = DateTime.Now;
TimeSpan timerun1 = dtnow.Subtract(dtstart); //获取当前系统时间与程序启动时间的差值,即为程序运行时间
string timerun = timerun1.Hours.ToString() + ":"+timerun1.Minutes.ToString()+":"+timerun1.Seconds.ToString();
this.labelProgramRUNTIME.Text = timerun;
}
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
//在任务栏图标单击鼠标左右键时,所触发的事件
}
private void 显示主窗口ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = true;
this.ShowInTaskbar = true;
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
private void 关于ToolStripMenuItem1_Click(object sender, EventArgs e)
{
FormReadMe form = new FormReadMe();
form.FormBorderStyle = FormBorderStyle.FixedSingle;
form.Show();
}
}
}
输入刷新间隔时间的窗体中,对于输入的正则判断以及父子窗体传值代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace AutoRefresh
{
public partial class FormTime : Form
{
// public WebBrowser webb; //本来是作为传参用的,结果发现了bug
public FormTime()
{
InitializeComponent();
}
// public FormTime(WebBrowser w) //传参数,使得类2可以调用类1的对象(formTime调用FormMain的对象webbrowser)
// {
// webb = w;
// InitializeComponent();
// }
public int f5time = 0; //向父Form的textbox中传值
public FormMain form = null; //向父Form的textbox中传值
public void GetForm(FormMain theform) //向父Form的textbox中传值,getform函数
{
form = theform;
}
private void buttonTimeCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonTimeOK_Click(object sender, EventArgs e)
{
if (textBoxTime.Text == "")
MessageBox.Show("请输入刷新间隔时间!");
else if (textBoxTime.Text == "0" || textBoxTime.Text == "1" || textBoxTime.Text == "2" || textBoxTime.Text == "3" || textBoxTime.Text == "4")
MessageBox.Show("请输入一个不小于5的数!");
else
{
// webb.Url = new Uri("http://www.hnu.edu.cn");
form.textBox2.Text = textBoxTime.Text;
this.Close();
}
}
private void textBoxTime_TextChanged(object sender, EventArgs e)
{
Regex r = new Regex("^[0-9]{1,}$");
Regex r0 = new Regex("^[1-9]{1,}$");
// if (textBoxTime.Text == "")
//{
// MessageBox.Show("请输入刷新间隔时间!");
// return;
// }
// else
if (textBoxTime.Text.Length == 1)
{
if (!r0.IsMatch(textBoxTime.Text)) //控制首位不能为0!
{
MessageBox.Show("首位请不要输入非1-9的数!");
// textBoxTime.Text = textBoxTime.Text.Substring(0, textBoxTime.Text.Length - 1);
textBoxTime.Text = "";
return;
}
else
{
// textBoxTime.Text = textBoxTime.Text.Substring(0, textBoxTime.Text.Length - 1);
return;
}
}
else
{
if (!r.IsMatch(textBoxTime.Text))
{
if (textBoxTime.Text.Length <= 1)
return;
else
{
textBoxTime.Text = textBoxTime.Text.Substring(0, textBoxTime.Text.Length - 1);
MessageBox.Show("请输入数字!");
textBoxTime.Focus();
textBoxTime.SelectionStart = this.textBoxTime.TextLength; //锁定光标的位置在字段尾部
}
}
}
}
private void FormTime_InputLanguageChanging(object sender, EventArgs e)
{
}
}
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)