程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
29 个解决方案
#1
我觉得你需要恶补一下基础知识
明显winform和webform都搞混了
winform根本没有页面跳转的概念,它只是打开窗口,关闭窗口
明显winform和webform都搞混了
winform根本没有页面跳转的概念,它只是打开窗口,关闭窗口
#2
使用定时器timer控件肯定是可以的。
用sleep(3000)也算可行~
用sleep(3000)也算可行~
#3
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
#4
这不就是一个窗口显示隐藏的功能么
#5
看需求是想在登陆完成后,给出一个提示信息框。
1.验证登陆,如果成功,new 个新窗体.这个新窗体上添加个timer控件
2. ShowDialog() ,在新窗体的load函数中启用timer,
timer的interval就是需要显示的时间
timer的执行内容就是 this.Close()
3.新窗体关闭后,使用dispose释放
#6
3楼正解
#7
我错了 那能帮我解决一下问题吗?
#8
做个自定义控件吧 可以不用再弹出窗体
#9
3楼和5楼的方案都可行
不过5楼的方案更好一点
把timer放到新窗体中,而不是主窗体中
不过5楼的方案更好一点
把timer放到新窗体中,而不是主窗体中
#10
timer的用法是不是这样:
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
t.AutoReset = false;
t.Enabled = true;
然后在theout方法里写timer的执行内容?
但是这样会报错啊,报错说要在创建新窗体的线程里面关闭新窗体(this.Close();)报错
#11
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
+1
#12
你直接从工具箱里拖个timer出来就可以了,不要乱用System.Timers.Timer ,这个是多线程的
#13
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
sleep方法不是在线程里面用的吗,这里应该用不了啊
#14
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
sleep方法不是在线程里面用的吗,这里应该用不了啊
#15
sleep方法不是在线程里面用的吗,这里应该用不了啊
主线程难道不是线程?
你基础知识需要恶补了.
另外,有怀疑,就动手试,报错了再问.
没试你怎么知道用不了
#16
timer控件有3种,你先恶补一下到底有什么区别.
如果没区别,也没必要弄3种了
各有各的用途,不能乱用.
如果没区别,也没必要弄3种了
各有各的用途,不能乱用.
#17
可以把你不对的代码贴出来看看
#18
timer控件有3种,你先恶补一下到底有什么区别.
如果没区别,也没必要弄3种了
各有各的用途,不能乱用.
好的好的,其实C#我一点没学过,现在赶鸭子上架要我写这个也是迫不得已。。
完全一点都不会T_T
#19
如题,刚刚开始学习winform编程,这个小问题不懂
程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
看需求是想在登陆完成后,给出一个提示信息框。
1.验证登陆,如果成功,new 个新窗体.这个新窗体上添加个timer控件
2. ShowDialog() ,在新窗体的load函数中启用timer,
timer的interval就是需要显示的时间
timer的执行内容就是 this.Close()
3.新窗体关闭后,使用dispose释放
timer的用法是不是这样:
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
t.AutoReset = false;
t.Enabled = true;
然后在theout方法里写timer的执行内容?
但是这样会报错啊,报错说要在创建新窗体的线程里面关闭新窗体(this.Close();)报错
不需要这么麻烦,直接从工具栏拖个timer放在弹出窗体上就行了
#20
新手还是多用工具箱,直接拖控件,事件在属性里双击生成
少写乱七八糟自己都看不懂的代码
少写乱七八糟自己都看不懂的代码
#21
用WPF可以实现web那样的跳转,没有问题
另外,可以尝试使用MDI窗体来切换子窗体
另外,可以尝试使用MDI窗体来切换子窗体
#22
除此之外,楼主所示代码里,不要关闭窗体,而要隐藏窗体。用timer来调用Hide()和Show()即可
#23
form1作为父窗体,
form2作为子状体,
form1:
(form2).show();
form2:
(from1).show();
this.close();
form2作为子状体,
form1:
(form2).show();
form2:
(from1).show();
this.close();
#24
我又看了一遍你的问题,3楼的代码不对,最后一行不应该是this.Close(),这样岂不是主界面被关闭了
正确的代码应该是:
签到 obj1=new 签到();
obj1.Show();
System.Threading.Thread.Sleep(3000);
obj1.Close();
正确的代码应该是:
签到 obj1=new 签到();
obj1.Show();
System.Threading.Thread.Sleep(3000);
obj1.Close();
#25
参考如下代码:
Timer是拖拽到Form2里的。
主窗体Form1:
被弹出窗体Form2:
Timer是拖拽到Form2里的。
主窗体Form1:
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.ShowDialog();
}
被弹出窗体Form2:
int i = 5;
public Form2()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
i--;
button1.Text = string.Format("关闭({0})", i);
if (i == 0)
this.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
button1.Text = string.Format("关闭({0})", i);
}
#26
登录窗体的登录按钮事件
private void btn_login_Click(object sender, EventArgs e)
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
}
主窗体的load事件
private void MainForm_Load(object sender, EventArgs e)
{
PromptForm promptForm = new PromptForm();
promptForm.ShowDialog();
}
提示窗体里拖一个Timer控件 设置属性Enable 为true Interval 为3000 然后加Timer的Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
this.Close();
}
private void btn_login_Click(object sender, EventArgs e)
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
}
主窗体的load事件
private void MainForm_Load(object sender, EventArgs e)
{
PromptForm promptForm = new PromptForm();
promptForm.ShowDialog();
}
提示窗体里拖一个Timer控件 设置属性Enable 为true Interval 为3000 然后加Timer的Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
this.Close();
}
如题,刚刚开始学习winform编程,这个小问题不懂
程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
#27
O(∩_∩)O谢谢这么热情的大家啦~问题已经解决了~
#28
我又看了一遍你的问题,3楼的代码不对,最后一行不应该是this.Close(),这样岂不是主界面被关闭了
正确的代码应该是:
签到 obj1=new 签到();
obj1.Show();
System.Threading.Thread.Sleep(3000);
obj1.Close();
有道理,这个问题只牵涉到2个点:
1.线程睡眠或者/定时器
2.this指针
Sleep(3000);和System.Threading.Thread.Sleep(3000);没有区别,因为都是在主线程中,没有子线程存在。
this指针的问题:
3楼原来的是直接使用:new 签到();这是一个匿名对象,接着在后面调用 close(); 的话,就是隐式调用this.close();这时候的this是指向那个匿名对象,还是主窗体?答案应该是主窗体。所以应该使用命名对象,正如上面。
#29
同问,不过我是在wpf中,mark一下
#1
我觉得你需要恶补一下基础知识
明显winform和webform都搞混了
winform根本没有页面跳转的概念,它只是打开窗口,关闭窗口
明显winform和webform都搞混了
winform根本没有页面跳转的概念,它只是打开窗口,关闭窗口
#2
使用定时器timer控件肯定是可以的。
用sleep(3000)也算可行~
用sleep(3000)也算可行~
#3
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
#4
这不就是一个窗口显示隐藏的功能么
#5
如题,刚刚开始学习winform编程,这个小问题不懂
程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
看需求是想在登陆完成后,给出一个提示信息框。
1.验证登陆,如果成功,new 个新窗体.这个新窗体上添加个timer控件
2. ShowDialog() ,在新窗体的load函数中启用timer,
timer的interval就是需要显示的时间
timer的执行内容就是 this.Close()
3.新窗体关闭后,使用dispose释放
#6
3楼正解
#7
我觉得你需要恶补一下基础知识
明显winform和webform都搞混了
winform根本没有页面跳转的概念,它只是打开窗口,关闭窗口
我错了 那能帮我解决一下问题吗?
#8
做个自定义控件吧 可以不用再弹出窗体
#9
3楼和5楼的方案都可行
不过5楼的方案更好一点
把timer放到新窗体中,而不是主窗体中
不过5楼的方案更好一点
把timer放到新窗体中,而不是主窗体中
#10
如题,刚刚开始学习winform编程,这个小问题不懂
程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
看需求是想在登陆完成后,给出一个提示信息框。
1.验证登陆,如果成功,new 个新窗体.这个新窗体上添加个timer控件
2. ShowDialog() ,在新窗体的load函数中启用timer,
timer的interval就是需要显示的时间
timer的执行内容就是 this.Close()
3.新窗体关闭后,使用dispose释放
timer的用法是不是这样:
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
t.AutoReset = false;
t.Enabled = true;
然后在theout方法里写timer的执行内容?
但是这样会报错啊,报错说要在创建新窗体的线程里面关闭新窗体(this.Close();)报错
#11
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
+1
#12
你直接从工具箱里拖个timer出来就可以了,不要乱用System.Timers.Timer ,这个是多线程的
#13
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
sleep方法不是在线程里面用的吗,这里应该用不了啊
#14
1.登陆,跳转到主界面
2.在主界面的Form.Shown 事件写入代码:
{
new 签到().show();
sleep(3000);
this.close();}
只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。
2.主界面.show();
sleep方法不是在线程里面用的吗,这里应该用不了啊
#15
sleep方法不是在线程里面用的吗,这里应该用不了啊
主线程难道不是线程?
你基础知识需要恶补了.
另外,有怀疑,就动手试,报错了再问.
没试你怎么知道用不了
#16
timer控件有3种,你先恶补一下到底有什么区别.
如果没区别,也没必要弄3种了
各有各的用途,不能乱用.
如果没区别,也没必要弄3种了
各有各的用途,不能乱用.
#17
可以把你不对的代码贴出来看看
#18
timer控件有3种,你先恶补一下到底有什么区别.
如果没区别,也没必要弄3种了
各有各的用途,不能乱用.
好的好的,其实C#我一点没学过,现在赶鸭子上架要我写这个也是迫不得已。。
完全一点都不会T_T
#19
如题,刚刚开始学习winform编程,这个小问题不懂
程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
看需求是想在登陆完成后,给出一个提示信息框。
1.验证登陆,如果成功,new 个新窗体.这个新窗体上添加个timer控件
2. ShowDialog() ,在新窗体的load函数中启用timer,
timer的interval就是需要显示的时间
timer的执行内容就是 this.Close()
3.新窗体关闭后,使用dispose释放
timer的用法是不是这样:
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
t.AutoReset = false;
t.Enabled = true;
然后在theout方法里写timer的执行内容?
但是这样会报错啊,报错说要在创建新窗体的线程里面关闭新窗体(this.Close();)报错
不需要这么麻烦,直接从工具栏拖个timer放在弹出窗体上就行了
#20
新手还是多用工具箱,直接拖控件,事件在属性里双击生成
少写乱七八糟自己都看不懂的代码
少写乱七八糟自己都看不懂的代码
#21
用WPF可以实现web那样的跳转,没有问题
另外,可以尝试使用MDI窗体来切换子窗体
另外,可以尝试使用MDI窗体来切换子窗体
#22
除此之外,楼主所示代码里,不要关闭窗体,而要隐藏窗体。用timer来调用Hide()和Show()即可
#23
form1作为父窗体,
form2作为子状体,
form1:
(form2).show();
form2:
(from1).show();
this.close();
form2作为子状体,
form1:
(form2).show();
form2:
(from1).show();
this.close();
#24
我又看了一遍你的问题,3楼的代码不对,最后一行不应该是this.Close(),这样岂不是主界面被关闭了
正确的代码应该是:
签到 obj1=new 签到();
obj1.Show();
System.Threading.Thread.Sleep(3000);
obj1.Close();
正确的代码应该是:
签到 obj1=new 签到();
obj1.Show();
System.Threading.Thread.Sleep(3000);
obj1.Close();
#25
参考如下代码:
Timer是拖拽到Form2里的。
主窗体Form1:
被弹出窗体Form2:
Timer是拖拽到Form2里的。
主窗体Form1:
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.ShowDialog();
}
被弹出窗体Form2:
int i = 5;
public Form2()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
i--;
button1.Text = string.Format("关闭({0})", i);
if (i == 0)
this.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
button1.Text = string.Format("关闭({0})", i);
}
#26
登录窗体的登录按钮事件
private void btn_login_Click(object sender, EventArgs e)
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
}
主窗体的load事件
private void MainForm_Load(object sender, EventArgs e)
{
PromptForm promptForm = new PromptForm();
promptForm.ShowDialog();
}
提示窗体里拖一个Timer控件 设置属性Enable 为true Interval 为3000 然后加Timer的Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
this.Close();
}
private void btn_login_Click(object sender, EventArgs e)
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
}
主窗体的load事件
private void MainForm_Load(object sender, EventArgs e)
{
PromptForm promptForm = new PromptForm();
promptForm.ShowDialog();
}
提示窗体里拖一个Timer控件 设置属性Enable 为true Interval 为3000 然后加Timer的Tick事件
private void timer1_Tick(object sender, EventArgs e)
{
this.Close();
}
如题,刚刚开始学习winform编程,这个小问题不懂
程序是这样子:登陆—主页面—显示签到成功(三秒)—回到主页面
百度谷歌了很久,很多人都说使用定时器,我试过很多都不行,各种出错。小白好悲伤,女程序员就要崩溃了!T_T所以来这里发帖求助。
有没有大神来帮我一下 ,最好给出解决方案,贴一下源码,感激不尽!
#27
O(∩_∩)O谢谢这么热情的大家啦~问题已经解决了~
#28
我又看了一遍你的问题,3楼的代码不对,最后一行不应该是this.Close(),这样岂不是主界面被关闭了
正确的代码应该是:
签到 obj1=new 签到();
obj1.Show();
System.Threading.Thread.Sleep(3000);
obj1.Close();
有道理,这个问题只牵涉到2个点:
1.线程睡眠或者/定时器
2.this指针
Sleep(3000);和System.Threading.Thread.Sleep(3000);没有区别,因为都是在主线程中,没有子线程存在。
this指针的问题:
3楼原来的是直接使用:new 签到();这是一个匿名对象,接着在后面调用 close(); 的话,就是隐式调用this.close();这时候的this是指向那个匿名对象,还是主窗体?答案应该是主窗体。所以应该使用命名对象,正如上面。
#29
同问,不过我是在wpf中,mark一下