0
votes

Ne peut pas ouvrir la deuxième forme

J'essaye d'ouvrir le deuxième formulaire en utilisant le code ci-dessous. Cela devrait fonctionner. Mais quelque chose est arrivé à mon projet.

Form2 newForm = new Form2();
newForm.Show();

L'utilisation du code mentionné affiche une erreur comme le montre l'image. J'ai ajouté un deuxième formulaire (Form2). Quel peut être le problème?

Erreur: Le type ou le nom de l'espace de noms 'Form2' est introuvable (vous manque une directive using ou une référence d'assembly?) p>


9 commentaires

Eh bien l'image semble indiquer une erreur (gribouillis rouges) .. quelle est l'erreur?


Vous pouvez pointer sur le soulignement d'erreur rouge pour obtenir un message d'erreur. Je suppose que vous n'avez pas utilisé Form2 pour déclarer


@Esmaeli - Peut-être qu'ils ne veulent pas de formulaire modal? Show () est parfaitement valide.


@BrootsWaymb vous avez raison, je viens de supprimer mon commentaire !.


Voici une erreur, Erreur: Le type ou le nom de l'espace de noms 'Form2' est introuvable


Quel est l'espace de noms de Form1 et Form2 ? L'erreur indique qu'ils sont différents et que vous n'avez pas d'instruction using dans Form1.cs


@BrootsWaymb oui Cela devrait être un espace de noms. l'espace de noms est différent.


Cliquez avec le bouton droit sur Form2 dans le code, sélectionnez `` Actions rapides et refactoring '' et ajoutez l'espace de noms manquant à l'aide de


merci à tous pour le sup!


3 Réponses :


-3
votes

vous pouvez essayer d'ouvrir le form2 dans le cas du form1.

double-cliquez sur form1 et sur l'événement onload Load (object sender, ...)

 private void Form1_Load(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Show();
}


2 commentaires

Le code en cours d'exécution dans votre événement est le code exact qui ne fonctionne pas pour OP.


La seule différence est que l'événement d'OP s'appelle Form1_Load_1 , ce qui est parfaitement valide, et peut également se produire lorsque vous jouez avec des événements à génération automatique, et l'un d'eux est généré en double. Cela ne résout rien.



0
votes

Le Form2 est dans un espace de noms différent de Form1. Vous devez utiliser la directive using.

Pseudo-code

// 1.st file, where the Form1 is declared:

// Place the using directive
using A2;

namespace A1
{
  public partial class Form1 : Form
  {
    public void ShowForm2()
    {
      Form2 newForm = new Form2();
      newForm.Show();

      // It works without the using directive aswell, while using following:
      A2.Form2 newForm = new A2.Form2();
      newForm.Show();
    }
  }
}

// 2.nd file, where the Form2 is declared:
namespace A2
{
  public partial class Form2 : Form
  {
    // Anything..
  }
}


2 commentaires

Ils n'ont pas besoin d'ajouter une directive using. C'est juste une approche. Ce n'est peut-être pas le bon pour leur cas.


@CodeStranger C'est vrai. Dans mon code, l'autre approche (pas tout à fait possible) a également été démontrée. Dans tous les cas, cette question a plusieurs solutions correctes.



2
votes

Vous devez soit vous assurer que les deux sont dans le même espace de noms, soit ajouter une instruction using dans Form1.cs .

Vous avez donc probablement quelque chose comme:

using TestFormsApp_Different

namespace TestFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 newForm = new Form2();
            newForm.Show();
        }
    }
}

et

namespace TestFormsApp_Different
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    }
}  

Soit changer l'espace de noms des deux pour le même, ou ajoutez un en utilisant à Form1.cs comme ceci:

namespace TestFormsApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 newForm = new Form2();
            newForm.Show();
        }
    }
}  

Vous devrez décider lequel l'approche est plus appropriée pour vous. Les deux ont du sens dans des situations différentes, mais c'est un autre sujet.


1 commentaires

Ouais, les deux options fonctionnent. OP n'a pas besoin d'ajouter une instruction using à Form1, mais n'a pas non plus besoin de leur faire le même espace de noms. Parfois, il est logique de faire l'un ou l'autre, selon la façon dont tout est le mieux organisé.