我有使用 ShowDialog 方法打开的表单。在这种形式中,我有一个名为“更多”的按钮。 如果我们单击“更多”,它应该打开另一个表单并关闭当前表单。
在更多按钮的单击事件处理程序上我编写了以下代码
MoreActions objUI = new MoreActions ();
objUI.ShowDialog();
this.Close();
但是发生的事情是,它并没有关闭第一个表单。所以,我将这段代码修改为
MoreActions objUI = new MoreActions ();
objUI.Show();
this.Close();
这里,第二个表单正在显示,并且在几秒钟内两个表单都被关闭。
任何人都可以帮我解决问题吗?我需要做的是,如果我们单击“更多”按钮,它应该打开另一个表单并关闭第一个表单。
任何形式的帮助都会对我很有帮助。
我认为主窗体应该负责打开两个子窗体。这是一些伪代码,解释了我会做什么:
// MainForm
private ChildForm childForm;
private MoreForm moreForm;
ButtonThatOpenTheFirstChildForm_Click()
{
childForm = CreateTheChildForm();
childForm.MoreClick += More_Click;
childForm.Show();
}
More_Click()
{
childForm.Close();
moreForm = new MoreForm();
moreForm.Show();
}
您只需要在第一个子项中创建一个简单的事件 MoreClick。这种方法的主要好处是您可以根据需要复制它,并且可以非常轻松地对某种基本工作流程进行建模。
如果我没猜错的话,你会这样尝试吗?
进入这个?
在您的 Form1 中,在按钮中添加此事件:
// button event in your Form1
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog(); // Shows Form2
}
然后,在您的 Form2 中,在按钮中添加此事件:
// button event in your Form2
private void button1_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3(); // Instantiate a Form3 object.
f3.Show(); // Show Form3 and
this.Close(); // closes the Form2 instance.
}
好的,所以我用了这个:
public partial class Form1 : Form
{
private void Button_Click(object sender, EventArgs e)
{
Form2 myForm = new Form2();
this.Hide();
myForm.ShowDialog();
this.Close();
}
}
这似乎工作正常,但第一个表单只是隐藏的,它仍然可以生成事件。需要“this.Close()”来关闭第一个表单,但如果您仍然希望表单运行(而不是像启动器一样),则必须将其替换为
this.Show();
祝你好运!
我会使用一个在按下更多按钮关闭第一个对话框时设置的值,然后让原始表单测试该值,然后显示该对话框。
对于前任
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool DrawText = false;
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
if (f2.ShowMoreActions)
{
Form3 f3 = new Form3();
f3.ShowDialog();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public bool ShowMoreActions = false;
private void button1_Click(object sender, EventArgs e)
{
ShowMoreActions = true;
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
试试这个..
//button1 will be clicked to open a new form
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false; // this = is the current form
SignUp s = new SignUp(); //SignUp is the name of my other form
s.Visible = true;
}
private void Button1_Click(object sender, EventArgs e)
{
NewForm newForm = new NewForm(); //Create the New Form Object
this.Hide(); //Hide the Old Form
newForm.ShowDialog(); //Show the New Form
this.Close(); //Close the Old Form
}
你可以考虑这个例子
//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
frm2.Show(this); //this will show Form2
frm1.Hide(); //this Form will hide
}
例如,您有一个名为
Button
的 Button1
。首先单击它,它将打开该 EventHandler
的 Button2
来调用另一个 Form
,您应该将以下代码写入您的按钮。
your name example=form2.
form2 obj=new form2();
obj.show();
要关闭form1,请编写以下代码:
form1.visible=false;
或者
form1.Hide();
您可以尝试添加一个布尔值,以便算法知道按钮何时被激活。单击时,布尔值检查为 true,显示新表单,最后一个表单关闭。
重要的是要知道表单会消耗一些内存(至少一点点),因此最好关闭那些您不会使用的表单,而不是仅仅隐藏它。在大型项目中发挥作用。
您需要控制主窗体中子窗体的打开。
就我而言,我在启动 form1 之前首先打开一个登录窗口。我通过 Program.cs 控制一切。在 Program.cs 中设置验证标志。从 Program.cs 打开登录窗口。然后控制转到登录窗口。然后,如果验证良好,请从登录窗口将验证标志设置为 true。现在您可以安全地关闭登录窗口。控制权返回到 Program.cs。如果验证标志为 true,则打开 form1。如果验证标志为 false,您的应用程序将关闭。
在 Program.cs 中:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
///
//Validation flag
public static bool ValidLogin = false;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
if (ValidLogin)
{
Application.Run(new Form1());
}
}
}
在Login.cs中:
private void btnOK_Click(object sender, EventArgs e)
{
if (txtUsername.Text == "x" && txtPassword.Text == "x")
{
Program.ValidLogin = true;
this.Close();
}
else
{
MessageBox.Show("Username or Password are incorrect.");
}
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
使用 this.Hide() 而不是 this.Close()
对 Program.cs 执行此操作
using System;
namespace ProjectName
{
public class Program
{
[STAThread]
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetDefaultCompatibleTextRendering(false);
new Form1().Show();
Application.Run();
}
}
}
在我看来它会是这样的:
MoreActions objUI = new MoreActions();
objUI.ShowDialog();
this.Close();
如果您想首先运行特定的表单(或页面),请应用以下方法 在程序.cs中 将 Application.Run(...) 更改为
Application.Run(new form2()) // 在 form2 的位置更改你想要的表单名称