5 votes

Passer une variable entre les formulaires Windows Forms

J'ai un problème concernant les délégués dans une application Windows Forms.

Il y a deux formulaires:

  1. le formulaire principal, qui a un bouton nommé "Paramètres".

  2. le formulaire "paramètres", c'est le formulaire "enfant".

Lorsque je clique sur le bouton "Paramètres" dans le formulaire principal, cela ouvre une instance du formulaire Paramètres.

Mon problème est que j'ai besoin de passer une variable au formulaire Paramètres, lorsque je l'ouvre. Ainsi, le nouveau formulaire affichera le texte de la variable. Je ne sais pas comment récupérer l'information dans le formulaire "enfant" Paramètres. J'ai suivi un tutoriel en ligne et n'ai pas compris comment lire les informations dans le formulaire de destination.

Voici ce que j'ai fait jusqu'à présent, le code dans le formulaire principal:

public partial class MainForm : Form
{
    /// 
    /// Délégué pour envoyer des données entre les formulaires
    /// 
    public delegate void PageInfoHandler(object sender, PageInfoEventArgs e);
    /// 
    /// Événement du délégué
    /// 
    public event PageInfoHandler PageInfoRetrieved;

    // Autres choses, événements, etc.

    private void toolStripBtnSettings_Click(object sender, EventArgs e)
    {
        PageInfoEventArgs args = new PageInfoEventArgs(SomeString);
        this.OnPageInfoRetrieved(args);

        SettingsForm settingsForm = new SettingsForm();
        settingsForm.ShowDialog();
    }

    private void OnPageInfoRetrieved(PageInfoEventArgs args)
    {
        if (PageInfoRetrieved != null)
            PageInfoRetrieved(this, args);
    }
}

12voto

Moo-Juice Points 22190

Transmettez toutes les informations que vous souhaitez dans le constructeur du formulaire Settings, et fournissez des méthodes d'accès pour les éléments dont vous avez besoin.

public class SettingsForm : WinForm
{
    private string m_Data;
    private int m_nExample = 0;

    // ctor
    public SettingsForm(string _data)
    {
        m_Data = data;  // vous pouvez maintenant utiliser ceci dans SettingsForm
    } // eo ctor

    public int Example {get{return(m_nExample);} }
} // eo class SettingsForm

Dans l'exemple ci-dessus, vous pouvez construire un SettingForm avec une chaîne et obtenir un entier qu'il peut utiliser. Dans votre code:

private void toolStripBtnSettings_Click(object sender, EventArgs e)
{
    PageInfoEventArgs args = new PageInfoEventArgs(SomeString);
    this.OnPageInfoRetrieved(args);

    SettingsForm settingsForm = new SettingsForm("donnees a passer");
    settingsForm.ShowDialog();  

    int result = settingsForm.Example; // récupérer l'entier utilisé par SettingsForm
}

5voto

Kate Gregory Points 13451

Le formulaire de paramètres est une classe. Il est désormais à vous et vous pouvez en faire ce que vous voulez. Ajoutez donc un paramètre (ou autant que vous le souhaitez) à son constructeur. Ensuite, dans votre MainForm, appelez SettingsForm (peu importe) et vous êtes prêt.

4voto

B Pete Points 618

Je suggérerais d'ajouter une propriété à SettingsForm.

Ensuite, appelez-la comme ceci :

SettingsForm settingsForm = new SettingsForm(); 
settingform.maPropriete = maValeurPropriete;
settingsForm.ShowDialog();

2voto

Mike Dour Points 1898

Ajoutez un constructeur à votre formulaire de paramètres qui prend des paramètres et transmettez-y toutes les données dont vous avez besoin.

2voto

Daniel Perez Points 2257

Vous pouvez créer un constructeur paramétrisé pour votre formulaire de paramètres qui accepte le texte et le définit sur une propriété dans le formulaire

public partial class SettingsForm : Form
{

   public string DisplayText {get;set;}

   public SettingsForm(string text)
   {
        DisplayText = text;
   }
}

ensuite, vous devez simplement initialiser le formulaire de paramètres comme ceci (depuis votre formulaire principal)

var settingsForm = new SettingsForm("mon texte d'initialisation");

votre formulaire de paramètres sera correctement initialisé, et vous aurez le texte souhaité dans la propriété DisplayText prêt à être utilisé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X