Hoe opent u een nieuw formulier uit een ander formulier

Ik heb een vorm die wordt geopend met behulp van de ShowDialog-methode. In dit formulier heb ik een knop genaamd.
Als we op meer klikken, moet het een ander formulier openen en het moet het huidige formulier sluiten.

Op meer knop op de knop Gebeurtenis van Evenement, heb ik de volgende code geschreven

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

Maar wat er gebeurt, is het niet de eerste vorm af. Dus ik heb deze code aangepast aan

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

Hier wordt het tweede formulier weergegeven en binnen enkele seconden worden beide formulieren gesloten.

Kan iemand me alstublieft helpen om het probleem op te lossen. Wat ik moet doen is, als we op meer knop klikken, zou het een ander formulier moeten openen en het eerste formulier sluiten.

Elke vorm van hulp zal echt nuttig voor mij zijn.


Antwoord 1, Autoriteit 100%

Naar mijn mening moet het hoofdvorm verantwoordelijk zijn voor het openen van zowel het kindformulier. Hier is wat pseudo die uitlegt wat ik zou doen:

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

U hoeft alleen maar een eenvoudig evenement te creëren Moreclick in het eerste kind. Het belangrijkste voordeel van deze aanpak is dat u het indien nodig kunt repliceren en u kunt zeer eenvoudig een soort basisworkflow modelleren.


Antwoord 2, Autoriteit 80%

Als ik je goed heb, probeer je dit zo?

hierin?

In uw Form1 Voeg deze gebeurtenis toe in uw knop:

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

Voeg vervolgens in uw Form2 toe, ook dit evenement in uw knop:

   // 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.
    }

Antwoord 3, Autoriteit 23%

OK, dus ik heb dit gebruikt:

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

Dit lijkt goed te werken, maar het eerste formulier is gewoon verborgen en het kan nog steeds evenementen genereren. De “This.close ()” is nodig om het eerste formulier te sluiten, maar als u nog steeds wilt dat uw formulier wordt uitgevoerd (en niet gedraagt ​​als een launcher), moet u deze vervangen door

this.Show();

veel succes!


Antwoord 4, Autoriteit 10%

Ik zou een waarde gebruiken die wordt ingesteld wanneer er meer knoppen worden gesloten in het eerste dialoogvenster en dan de oorspronkelijke vorm de waarde laten testen en vervolgens het dialoogvenster daar weergeven.

Voor de ex

  1. Maak drie vensters froms
  2. Formulier1 Formulier2 Formulier3
  3. Een knop toevoegen aan Form1
  4. Voeg twee knoppen toe aan formulier2

Formulier 1-code

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

Form2 code

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

Form3 verlaten zoals het is


Antwoord 5, autoriteit 5%

Probeer dit..

Er wordt op

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

Antwoord 6, autoriteit 2%

u kunt dit voorbeeld overwegen

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

Antwoord 7, autoriteit 2%

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
}

Antwoord 8

Je hebt bijvoorbeeld een Buttonmet de naam Button1. Klik er eerst op en het opent de EventHandlervan die Button2om een ander Formop te roepen. Schrijf de volgende code naar je Button.

your name example=form2.
form2 obj=new form2();
obj.show();

Om formulier1 te sluiten, schrijft u de volgende code:

form1.visible=false;
of
form1.Hide();


Antwoord 9

Je zou kunnen proberen een bool toe te voegen, zodat het algoritme weet wanneer de knop is geactiveerd. Wanneer erop wordt geklikt, wordt de bool gecontroleerd, wordt het nieuwe formulier weergegeven en wordt het laatste gesloten.

Het is belangrijk om te weten dat formulieren wat ram (ten minste een klein beetje) verbruiken, dus het is een goed idee om de formulieren die je niet gaat gebruiken te sluiten, in plaats van ze gewoon te verbergen. Maakt het verschil in grote projecten.


Antwoord 10

U moet het openen van subformulieren beheren vanuit een hoofdformulier.

In mijn geval open ik eerst een aanmeldvenster voordat ik mijn formulier start1. Ik beheer alles vanuit Program.cs. Stel een validatievlag in in Program.cs. Open het aanmeldingsvenster vanuit Program.cs. Controle gaat dan naar het inlogvenster. Als de validatie goed is, stelt u de validatievlag in op true vanuit het inlogvenster. Nu kunt u het inlogvenster veilig sluiten. Controle keert terug naar Program.cs. Als de validatievlag waar is, opent u form1. Als de validatievlag onwaar is, wordt uw toepassing gesloten.

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

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

Antwoord 11

Gebruik this.Hide() in plaats van dit.Close()

Other episodes