none
Как по нажатию кнопки с формы запускалась новая форма а форма где находиться кнопка закрывалясь? RRS feed

  • Вопрос

  • Как по нажатию кнопки с формы запускалась новая форма а форма где находиться кнопка закрывалясь?
    • Перемещено I.Vorontsov 12 января 2010 г. 8:05 (От:Visual C#)
    • Перемещено SachinW 1 октября 2010 г. 22:21 MSDN Forums Consolidation (От:Начинающие разработчики)
    28 сентября 2009 г. 6:13

Ответы

  • В первой форме на событии кнопки:
    SecondForm sf = new SecondForm();
    sf.Show();
    Во второй форме на Load:
    firstForm.Close();
    Но учтите, что, если первая форма является стартовой, то по ее закрытию (по умолчанию) закроется и все приложение. Нужно будет изменять свойства Application.
    • Предложено в качестве ответа Vitaly Zayko 28 сентября 2009 г. 6:25
    • Помечено в качестве ответа Анна2510 28 сентября 2009 г. 7:08
    28 сентября 2009 г. 6:24

Все ответы

  • В первой форме на событии кнопки:
    SecondForm sf = new SecondForm();
    sf.Show();
    Во второй форме на Load:
    firstForm.Close();
    Но учтите, что, если первая форма является стартовой, то по ее закрытию (по умолчанию) закроется и все приложение. Нужно будет изменять свойства Application.
    • Предложено в качестве ответа Vitaly Zayko 28 сентября 2009 г. 6:25
    • Помечено в качестве ответа Анна2510 28 сентября 2009 г. 7:08
    28 сентября 2009 г. 6:24
  • Также в качестве решения можете использовать TabControl чтобы не использовать большое количество окон. Про компонент можно почитать здесь: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/47142bb9-30a4-46a2-a01a-589059dfa3a0
    28 сентября 2009 г. 7:23
  • Возможно, стоит не закрывать первую форму, а просто установить значения свойства Visible равным False.
    6 января 2010 г. 21:02
  •  //Form1

    public partial class Form1 : Form

    {

    public Form1()

    {

    InitializeComponent();

    }



    private void button1_Click(object sender, EventArgs e)

    {

    Form2 wnd = new Form2(this);

    wnd.Show();

    }



    private void button2_Click(object sender, EventArgs e)

    {

    this.Visible = false;

    }

    }



    //Form2

    public partial class Form2 : Form

    {

    public Form2()

    {

    InitializeComponent();

    }



    /// <summary>

    /// Конструктор с ссылкой на родительскую форму

    /// </summary>

    public Form2(Form1 form)

    {

    InitializeComponent();

    this.parentForm = form;

    }

    private Form1 parentForm;



    /// <summary>

    /// Закрытие родительской формы - закрытие всего приложение

    /// </summary>

    private void button1_Click(object sender, EventArgs e)

    {

    if (parentForm != null)

    {

    parentForm.Close();

    }

    }



    /// <summary>

    /// Сделать родительскую форму видимой

    /// </summary>

    private void button2_Click(object sender, EventArgs e)

    {

    if (parentForm != null)

    {

    if (!parentForm.Visible)

    {

    parentForm.Visible = true;

    }

    }

    }

    }
    7 января 2010 г. 3:23
  • //Form1
    private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm = new Form2();
                frm.SampleEvent += new Form2.SampleEventHandler (frm_SampleEvent);
                frm.Show();
                Form1.Hide();
            }
    
            void frm_SampleEvent(object sender, EventArgs e)
            {
                Form1.Show();
            }
    //Form2
    public delegate void SampleEventHandler(object sender, EventArgs e);
    
            public event SampleEventHandler SampleEvent;
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (SampleEvent != null)
                {
                    SampleEvent(this, null);
                }
            }
        }
    
    7 января 2010 г. 15:02
  • а не подскажете как на С++ будет?

    25 января 2010 г. 15:28
  • а не подскажете как на С++ будет?

    На ваш вопрос вроде бы уже дан ответ
    26 января 2010 г. 6:20
  • если вы про это

    //Form2.cpp<br/><br/>#include "StdAfx.h"
    #include "Form1.h"
    #include "Form2.h"
    
    System::Void CppWinform::Form2::button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
     Form1^ frm1 = gcnew Form1();
     frm1->Show();
     this->Hide();
    }
    
    System::Void CppWinform::Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) {
     Form2^ frm2 = gcnew Form2();
     frm2->Show();
    this->Hide();	 			 
    }
    то так вообще не получается....
    27 января 2010 г. 9:29
  • а это вообще какой-то код под билдер

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
          this->Hide();
          Form2 = new TForm2(this);
          Form2->Show();
    }
    //---------------------------------------------------------------------------


    Unit2.cpp:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit2.h"
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    TForm1 *owner;
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
            owner=(TForm1*)Owner;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
            this->Hide();
            owner->Show();
    }
    
    27 января 2010 г. 9:31
  • Вынесите реализацию метода нажатия кнопки во второй формы в отдельный файл:

    //Form1.h
    #include "Form2.h"
    namespace wfa2 {
    	//...
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Add the constructor code here
    			//
    			f2=gcnew Form2();
    		}
    	//...
    	private: System::Windows::Forms::Button^  button1;
    	private:
    		//...
    		void InitializeComponent(void)
    		{
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			//...
    			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    			//...
    		}
    	private: Form2^ f2;
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    				 this->Hide();
    				 f2->Show(this);
    			 }
    	};
    }
    
    //Form2.h
    namespace wfa2 {
    	//...
    	public ref class Form2 : public System::Windows::Forms::Form
    	{
    	//...
    	private: System::Windows::Forms::Button^  button1;
    	private:
    		//...
    		void InitializeComponent(void)
    		{
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			//...
    			this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
    			//...
    
    		}
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e);
    	};
    }
    
    //Form2.cpp
    #include "StdAfx.h"
    #include "Form1.h"
    #include "Form2.h"
    
    System::Void wfa2::Form2::button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
    	this->Hide();
    	Form1^ owner=(Form1^)this->Owner;
    	owner->Show();
    }
    

    Можете почитать: WinForms две формы

    27 января 2010 г. 11:40
  • когда вставляю в Form2.cpp:

    System::Void лдтдл::Form2::button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
    this->Hide();
    Form1^ owner=(Form1^)this->Owner;
    owner->Show();
    }

    пишет:

    Ошибка 1 error C2084: функция "void лдтдл::Form2::button1_Click(System::Object ^,System::EventArgs ^)" уже имеет текст реализации c:\Users\комп\Documents\Visual Studio 2008\Projects\лдтдл\лдтдл\Form2.cpp 7

    ???
    28 января 2010 г. 20:33
  • а вот за ссылочку спасибо - сделал вот таким образом:: файл Form2.cpp вообще не трогал
    в form1 написал:

    private

     

    : System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

    Form2 ^frm2 =

    gcnew Form2();

    frm2->Owner=

    this;

    frm2->Show();

     

    this->Hide();

    }

    а в Form2:


    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
             Owner->Show(); 
             this->Close();


     }

    28 января 2010 г. 21:35
  • ошибка потому что в form2.h надо было оставить только прототип обработчика, т.е. вместо
    private : System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){};
    оставить только
    private
    : System::Void button1_Click(System::Object^ sender, System::EventArgs^ e);

    а через Owner->Show(); форма то откроется, но вы не сможете достучаться например до паблик текстбокса, потому что здесь owner получается Form а не Form1, для этого и было необходимо делать Form1^ owner=(Form1^)this ->Owner;
    29 января 2010 г. 5:40