我的应用程序的Form1是我想要的登录页面:
- 在某些条件下显示
- 在某些条件下隐藏并显示Form2
我可以通过按钮点击事件隐藏/显示表单,如此,
private void button1_Click(object sender, EventArgs e)
{
Form2 f2= new Form2();
f2.Show();
this.Hide();
}
但是相同的技术不适用于Form1_Load。
我在this thread中尝试了第一个例子,
Program.cs的
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run();
}
Form1
private void Form1_Load(object sender, EventArgs e)
{
Form2 f2= new Form2();
f2.Show();
this.Hide();
}
但它没有显示Form1或Form2,我也看不出它是怎么回事。第二个例子我无法理解我如何实现,而下一个谷歌的结果更令人困惑 请帮助我坚持这2小时。
答案 0 :(得分:3)
在program.cs的最后一行中,您必须在括号之间键入new Form1()
。所以,你的program.cs代码如下:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
C#无法隐藏form_load中的表单显然。 要解决隐藏问题,您可以使用计时器并在tick事件中隐藏表单。即:
Timer timer = new Timer();
private void timerTick(object sender, EventArgs e)
{
timer.Enabled = false;
this.Hide();
}
private void Form1_Load(object sender, EventArgs e)
{
timer.Tick += new EventHandler(timerTick);
timer.Interval = 10;
Form2 frm = new Form2();
frm.Show();
timer.Enabled = true;
}
这很有效。我测试了它。
我希望这会有用。
答案 1 :(得分:1)
你好,你可以使用这个
;display_errors
;display_startup_errors
;error_reporting
答案 2 :(得分:0)
为什么不颠倒表单的顺序?从main方法中的主窗体开始。
Application.Run(new Form2());
现在,在Form2的构造函数中,使用ShowDialog调用登录表单,并在Form2中的全局变量中设置登录结果
public class Form2:Form
{
private bool _isValidated = false;
public Form2()
{
InitializeComponent();
// Add here the conditions to check if you don't want to
// run the login process...
// if(loginNotRequired)
// _isValidated = true;
// else
using(Form1 fLogin = new Form1())
{
// This blocks until the user clicks cancel or ok buttons
DialogResult dr = fLogin.ShowDialog();
if(dr == DialogResult.OK)
_isValidated = true;
}
}
现在在Form2.Load事件中检查您的登录状态,如果登录失败则关闭Form2
private void Form2_Load(object sender, EventArgs args)
{
if(!_isValidated)
this.Close();
else
.....
}