none
modifier un contrôle d'une Formulaire appelante depuis une Formulaire appelée RRS feed

  • Question

  • Bonjour,

    Peut-on manipuler une formulaire appelante depuis une formulaire appelée en utilisant C# ?

    soit l'exemple suivant :

    • une formulaire "Form1" contient une DataGridView "DGVF1" appelle une deuxième formulaire "Form2"
    • "Form2" contient un TextBox "TBF2" et un bouton "Afficher s'il Existe"
    • le bouton "Afficher s'il Existe" teste l’existence de la valeur tapée sur le TextBox "TBF2", si la valeur existe alors la ligne correspondante dans le DataGridView "DGVF1" sera sélectionnée en bleu    

    Est-ce que c'est possible ?

    Merci d'avance 

    Cordialement.

    mercredi 29 avril 2015 09:05

Réponses

  • Bonjour,

    Par exemple:

    Dans le formulaire Form1

     

    m_Tbl = new DataTable("PARAMETRES");

    m_Tbl.Columns.Add(new DataColumn("INDEX", typeof(Int32)));

    m_Tbl.Columns.Add(new DataColumn("REPERE", typeof(string)));

    m_Tbl.Columns.Add(new DataColumn("VALEUR", typeof(double)));

     

    GRIDVWparam.DataSource = m_Tbl;

     

    GRIDVWparam.Columns[0].HeaderText = "Index";

    GRIDVWparam.Columns[0].ReadOnly = true;

    GRIDVWparam.Columns[0].Width = 30;

    GRIDVWparam.Columns[0].FillWeight = 30;

    GRIDVWparam.Columns[0].Visible = false;

     

    GRIDVWparam.Columns[1].HeaderText = "Repère";

    GRIDVWparam.Columns[1].ReadOnly = true;

    GRIDVWparam.Columns[1].Width = 30;

    GRIDVWparam.Columns[1].FillWeight = 50;

    GRIDVWparam.Columns[1].Visible = true;

     

    GRIDVWparam.Columns[2].HeaderText = "Valeur";

    GRIDVWparam.Columns[2].ReadOnly = true;

    GRIDVWparam.Columns[2].Width = 30;

    GRIDVWparam.Columns[2].FillWeight = 50;

    GRIDVWparam.Columns[2].Visible = true;

     

    GRIDVWparam.RowHeadersVisible = false;

    GRIDVWparam.AllowUserToAddRows = false;

    GRIDVWparam.AllowUserToDeleteRows = false;

    GRIDVWparam.AllowUserToOrderColumns = false;

    GRIDVWparam.Anchor = AnchorStyles.Left | AnchorStyles.Right;

    GRIDVWparam.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

     

    //Remplir la table

    DataRow l_Row = m_Tbl.NewRow();

    l_Row[0] = 0;

    l_Row[1] = "AB";

    l_Row[2] = 15.25;

    m_Tbl.Rows.Add(l_Row);

     

    l_Row = m_Tbl.NewRow();

    l_Row[0] = 1;

    l_Row[1] = "BC";

    l_Row[2] = 30.48;

    m_Tbl.Rows.Add(l_Row);

     

    l_Row = m_Tbl.NewRow();

    l_Row[0] = 2;

    l_Row[1] = "CD";

    l_Row[2] = 18.33;

    m_Tbl.Rows.Add(l_Row);

     

    l_Row = m_Tbl.NewRow();

    l_Row[0] = 3;

    l_Row[1] = "DA";

    l_Row[2] = 41.78;

    m_Tbl.Rows.Add(l_Row);

    Notez bien que la première colonne contient l'index de la ligne...

     

    Définir un gestionnaire d’évènement
    Comme on filtre sur un double, il préférable de définir une plage de recherche.

    C'est inutile sur les entiers.

    Public void onRecherche(object sender, EvSaisie p_Arg)

    {

     DataView l_Vue = new DataView();

     l_Vue.Table = m_Tbl;

     l_Vue.RowFilter = string.Format("(VALEUR>{0:F2}) and (VALEUR<{1:F2})", new object[] {  p_Arg.Param - 0.1, p_Arg.Param + 0.1 });

     foreach (DataRowView l_RowV in l_Vue)

     {

      int idR = (int) l_RowV[0];

      DataGridViewRow l_RowGrid = GRIDVWparam.Rows[idR];

      l_RowGrid.Cells[1].Style.BackColor = Color.Red;

     }

    }      

     

    Dans le formulaire Form2

     

    Définir les abonnés à l’évènement

    public DSaisie AbonneSaisieParam;

     

    Déclencher l’évènement sur le click de l’opérateur

    private void BTNrechercher_Click(object sender, EventArgs e)

    {

     double l_Param = 0.0;

     if (double.TryParse(TBOXparam.Text, out l_Param))

      {

         if (AbonneSaisieParam != null)

            {

              AbonneSaisieParam(this, new EvSaisie("RECHERCHE", l_Param));

            }

      }

    }

     

    Définition de l’évènement personnalisé

    public class EvSaisie : EventArgs

    {

     public string Message;

     public double Param;

     

     public EvSaisie(string p_MSG, double p_Param)

     {

      Message = new string(p_MSG.ToCharArray());

      Param = p_Param;

     }

    }

     

     public delegate void DSaisie(object sender, EvSaisie p_Evt);

     

    Dans le programme

    Form2 l_Dlg = new Form2();

    l_Dlg.AbonneSaisieParam += new DSaisie(Form1.onRecherche);

    l_Dlg.Show();

    Cordialement
    Gérard






    • Proposé comme réponse GP79 mercredi 29 avril 2015 10:36
    • Modifié GP79 mercredi 29 avril 2015 12:10
    • Marqué comme réponse Teodora SharkovaModerator mardi 9 février 2016 10:36
    mercredi 29 avril 2015 10:35