如何从另一个表单打开一个新表单

Din*_*esh 48 .net c# .net-2.0 winforms

我有使用ShowDialog方法打开的表单.在这种形式我有一个名为更多的按钮.如果我们点击"更多",它应该打开另一个表单,它应该关闭当前表单.

在更多按钮的Click事件处理程序我写了以下代码

MoreActions objUI = new MoreActions (); 
objUI.ShowDialog();
this.Close();
Run Code Online (Sandbox Code Playgroud)

但正在发生的是,它没有关闭第一种形式.所以,我修改了这段代码

MoreActions objUI = new MoreActions (); 
objUI.Show();
this.Close();
Run Code Online (Sandbox Code Playgroud)

在这里,第二种形式显示,并在几秒钟内关闭表格.

任何人都可以帮我解决问题.我需要做的是,如果我们点击更多按钮,它应该打开另一个表单并关闭第一个表单.

任何形式的帮助对我都很有帮助.

Joh*_*ais 52

在我看来,主要表格应该负责打开两个子表格.这是一些伪解释我会做什么的:

// 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();
}
Run Code Online (Sandbox Code Playgroud)

您只需要在第一个孩子中创建一个简单的事件MoreClick.这种方法的主要好处是您可以根据需要进行复制,并且可以非常轻松地为某种基本工作流建模.


yon*_*236 38

如果我找对你,你是这样想的吗?

替代文字

进入这个?
替代文字

在您的Form1中,在您的按钮中添加此事件:

    // button event in your Form1
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog(); // Shows Form2
    }
Run Code Online (Sandbox Code Playgroud)

然后,在您的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.
    }
Run Code Online (Sandbox Code Playgroud)

  • 为什么使用f2.ShowDialog(); 在第一种情况下和f3.Show()在第二种情况下? (6认同)

小智 13

好吧所以我用过这个:

public partial class Form1 : Form
{
    private void Button_Click(object sender, EventArgs e)
    {
        Form2 myForm = new Form2();
        this.Hide();
        myForm.ShowDialog();
        this.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但第一种形式只是隐藏,它仍然可以生成事件.关闭第一个表单需要"this.Close()"但是如果你仍然希望你的表单运行(而不是像启动器那样)你必须用它替换它

this.Show();
Run Code Online (Sandbox Code Playgroud)

祝你好运!


rer*_*run 6

我会使用一个值,当更多按钮被推闭时,第一个对话框被关闭,然后让原始表单测试值,然后显示那里的对话框.

对于前

  1. 创建三个窗口
  2. Form1 Form2 Form3
  3. 向Form1添加一个按钮
  4. 向form2添加两个按钮

表格1代码

 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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

Form2代码

 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

保留form3原样