C++/CLI – cómo abrir un formulario nuevo y de nuevo

Estoy creando una aplicación en la que el extremo delantero tiene que ser un Formulario de Windows con C++/CLI. Se utiliza el formulario de inicio de sesión propósito.

En mi formulario tengo un botón de registro. Haga clic en este botón, una nueva forma debe abrir ( cerrando el formulario de inicio de sesión ). Yo era capaz de lograr esto mediante el siguiente código:

Form^ rgForm = gcnew RegisterForm;
rgForm->Show();
this->Hide(); //using this->Close() was closing the application

Ahora quiero tener un botón de cancelar en el formulario de registro, cuya clic debe abrir el formulario de inicio de sesión de nuevo y cerrar el formulario de registro. ¿Cómo puedo lograr esto?

( Estoy confundido con el uso de este->Ocultar(), significa que la forma existe, simplemente no lo muestra, y por lo que incluso después de que el formulario de registro de la visibilidad, el formulario de inicio de sesión todavía existe? )

Actualización : Ahora forma actual identificador se pasa en el formulario de registro de constructor ( guardar como una variable privada con el nombre de loginForm en RegisterForm clase ).

El siguiente es el código para el botón cancelar haga clic en:

//RegisterForm class constructor

RegisterForm(System::Windows::Forms::Form^ f)
{
    loginForm = f;
}

//Cancel button click

private: System::Void BtnCancel_Click(System::Object^  sender, System::EventArgs^  e) 
{
     loginForm->Show();
     this->Hide();
}

Sobre el botón cancelar, haga clic en me estoy haciendo la excepción : «el objeto no establecida como instancia».

Por favor alguien puede ayudarme.

Gracias.

InformationsquelleAutor Jake | 2011-04-24

3 Kommentare

  1. 3

    Crear un constructor para RegisterForm que acepta un System::Windows::Form ^ objeto, y de paso this a él cuando le instancias dentro de la forma de inicio de sesión de clase

    Form^ rgForm = gcnew RegisterForm(this);
    rgForm->Show();
    this->Hide();

    Asumir el formulario de inicio de sesión de objeto se llama otherform dentro de la RegisterForm clase. Una vez que esté listo para traerlo de vuelta, simplemente llame a otherform->Show()

    Cuando se oculta el formulario, que todavía existe, no es visible para el usuario.

    EDICIÓN: tengo este que funciona muy bien. Aquí están las modificaciones (no el código completo) que hice para el formulario

    Form2(formulario de Inscripción)

    Form2(System::Windows::Forms::Form ^ frm1)
        {
            otherform = frm1;
            InitializeComponent();
    
        }
    
    private: System::Windows::Forms::Form ^ otherform;
    
    private: System::Void Cancel_Click(System::Object^  sender, System::EventArgs^  e) {
                 this->Hide();
                 otherform->Show();

    }

    Form1(formulario de inicio de Sesión)

    #include "Form2.h"
    
    private: System::Void Register_Click(System::Object^  sender, System::EventArgs^  e) {
    
                 Form2 ^ frm2 = gcnew Form2(this);
                 frm2->Show();
                 this->Hide();
    }
    • Es esta la manera correcta de hacerlo en el constructor: RegisterForm(Sistema de::Windows::Formularios::Formulario de^ f) { otherForm = f; } porque en el uso de otherForm en el botón Cancelar, haga clic en, puedo obtener una referencia nula. Gracias.
    • puedes publicar el código que se está utilizando en el botón Cancelar, haga clic en?
    • He editado la pregunta ( añadido botón cancelar código )
    • Estoy tratando de hacer una maqueta de su código. Va a ser un par de minutos.
    • Yo tengo que trabajar bien. He publicado el código. Compruebe que tiene de todo (la forma como una variable miembro, todos los includes, etc.)
    • Se trabajó….muchas gracias! 🙂
    • No hay problema

  2. 1

    Por lo tanto , me gustaría mostrar mi código completo para ayudar a los demás:-

    Form2.h

    #pragma once
    
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    
    namespace Form1 {
    
    
    
        ///<summary>
        ///Summary for Form2
        ///</summary>
        public ref class Form2 : public System::Windows::Forms::Form
        {
    
    
    
        private: System::Windows::Forms::Form ^ otherform;
        public:
            Form2(System::Windows::Forms::Form ^ o )
            {
                otherform = o;
                InitializeComponent();
    
                //
                //TODO: Add the constructor code here
                //
            }
    
        protected:
            ///<summary>
            ///Clean up any resources being used.
            ///</summary>
            ~Form2()
            {
                if (components)
                {
                    delete components;
                }
            }
        private: System::Windows::Forms::Button^  button1;
        protected: 
    
        private:
            ///<summary>
            ///Required designer variable.
            ///</summary>
            System::ComponentModel::Container ^components;
    
            #pragma region Windows Form Designer generated code
            ///<summary>
            ///Required method for Designer support - do not modify
            ///the contents of this method with the code editor.
            ///</summary>
            void InitializeComponent(void)
            {
                this->button1 = (gcnew System::Windows::Forms::Button());
                this->SuspendLayout();
                //
                //button1
                //
                this->button1->Location = System::Drawing::Point(147, 132);
                this->button1->Name = L"button1";
                this->button1->Size = System::Drawing::Size(102, 38);
                this->button1->TabIndex = 0;
                this->button1->Text = L"Menu";
                this->button1->UseVisualStyleBackColor = true;
                this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
                //
                //Form2
                //
                this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
                this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
                this->ClientSize = System::Drawing::Size(412, 295);
                this->Controls->Add(this->button1);
                this->Name = L"Form2";
                this->Text = L"Form2";
                this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
                this->ResumeLayout(false);
    
            }
        #pragma endregion
        private: System::Void Form2_Load(System::Object^  sender, System::EventArgs^  e) {
                 }
        private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                     this->Hide();
                 otherform->Show();
    
                 }
        };
    
    
    
    
    
    
        ////////////////////////
    
    }
  3. 0
    ///////////////////////Form1.h
    #pragma once
    #include "stdafx.h"
    #include "Form2.h"
    namespace Form1 {
    
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    
    ///<summary>
    ///Summary for Form1
    ///</summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
    
    protected:
        ///<summary>
        ///Clean up any resources being used.
        ///</summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Button^  button1;
    protected: 
    
    private:
        ///<summary>
        ///Required designer variable.
        ///</summary>
        System::ComponentModel::Container ^components;
    
       #pragma region Windows Form Designer generated code
        ///<summary>
        ///Required method for Designer support - do not modify
        ///the contents of this method with the code editor.
        ///</summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            //
            //button1
            //
            this->button1->Location = System::Drawing::Point(140, 206);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"Login";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
            //
            //Form1
            //
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(377, 291);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
    
        }
    #pragma endregion
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    
             Form2 ^ frm2 = gcnew Form2(this);
             frm2->Show();
             this->Hide();
    
    
             }
    };

    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea