it-swarm.com.ru

Как открыть новую форму из другой формы

У меня есть форма, которая открывается с помощью метода ShowDialog. В этой форме у меня есть кнопка с именем More . Если мы нажмем на More, она должна открыть другую форму и закрыть текущую форму.

в обработчике события Click для кнопки «Больше» я написал следующий код

MoreActions objUI = new MoreActions (); 
objUI.ShowDialog();
this.Close();

Но то, что происходит, это не закрытие первой формы. Итак, я изменил этот код 

MoreActions objUI = new MoreActions (); 
objUI.Show();
this.Close();

Здесь отображается вторая форма, и в течение нескольких секунд закрываются обе формы.

Может кто-нибудь, пожалуйста, помогите мне решить проблему. Что мне нужно сделать, так это то, что если мы нажмем кнопку «Еще», она должна открыть другую форму и закрыть первую форму.

Любая помощь будет очень полезна для меня.

44
Dinesh

На мой взгляд, основная форма должна отвечать за открытие обеих дочерних форм. Вот некоторые псевдо, которые объясняют, что я буду делать:

// 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 у первого ребенка. Основным преимуществом этого подхода является то, что вы можете реплицировать его по мере необходимости и очень легко смоделировать какой-то базовый рабочий процесс.

47
Johann Blais

Если я правильно понял, ты пытаешься так? 

alt text

в это?
alt text

в вашей 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.
    }
36
yonan2236

хорошо, так что я использовал это:

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

Удачи!

13
user2584967

Я бы использовал значение, которое устанавливается, когда больше кнопок нажимается в первом диалоговом окне, а затем исходная форма проверяет значение и затем отображает диалоговое окно там.

Для бывших 

  1. Создайте три окна из
  2. Форма1 Форма2 Форма3
  3. Добавить одну кнопку в Form1
  4. Добавьте две кнопки в форму2

Код формы 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();
        }

    }

Код формы 2 

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

Оставьте форму 3 как есть 

6
rerun

Попробуй это..

//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;
}
3
fmp

вы можете рассмотреть этот пример

//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
    frm2.Show(this); //this will show Form2
    frm1.Hide();  //this Form will hide
}
1
Ramgy Borja

Например, у вас есть Button с именем Button1. Сначала щелкните по нему, чтобы открыть EventHandler этого Button2 для вызова другого Form. Вам нужно написать следующий код для вашей кнопки.

your name example=form2.

form2 obj=new form2();

obj.show();

Чтобы закрыть form1, напишите следующий код:

form1.visible=false; или form1.Hide();

0

Вы можете попробовать добавить bool, чтобы алгоритм знал, когда кнопка была активирована. При щелчке bool проверяет true, отображается новая форма, а последняя закрывается.

Важно знать, что формы потребляют некоторое количество оперативной памяти (по крайней мере, немного), поэтому рекомендуется закрывать те, которые вы не собираетесь использовать, вместо того, чтобы просто скрывать это. Делает разницу в больших проектах.

0
Rafael