2017-08-23 1 views
-1

Lorsque j'exécute mon application de bureau, le formulaire1 est ouvert en premier et lorsqu'une ligne de la vue de grille de données1 est cliquée, une instance de form2 est ouverte.form2 comporte plusieurs zones de texte et lorsque je les remplis bouton ces valeurs doivent être montrées dans la vue de grille de données 2 de form1!Empêchez de rouvrir le premier formulaire C#

suivant donne le code de form1

public partial class Form1 : Form 
{ 


    string dbconnection; 

    public Form1() 
    { 
     InitializeComponent(); 

     dbconnection = @" Data Source = D:\SQLite\SQLiteStudio\DB1.db ; version=3 "; 

    } 
    private static Form1 f1; 

    public static Form1 getInstance(){ 
     if (f1 == null) 
     { 
      f1 = new Form1(); 
     } 
     else 
      f1.BringToFront(); 
      return f1; 

    } 

    private void loadButton_Click(object sender, EventArgs e) 
    { 
       { 
     using (SQLiteConnection con = new SQLiteConnection(dbconnection)) 
     { 
      try 
      { 
       con.Open(); 

       if (con.State == ConnectionState.Open) 
       { 
        string sql = "select MESSAGE_ID from Message"; 
        SQLiteCommand command = new SQLiteCommand(sql, con); 
        SQLiteDataReader reader = command.ExecuteReader(); 
        //dataGridView1.ColumnCount = 1; 
        // dataGridView1.Columns[0].Name = "Message ID"; 
        DataTable ds = new DataTable(); 
        ds.Load(reader); 
        dataGridView1.AutoGenerateColumns = true; 
        dataGridView1.DataSource = ds; 
        dataGridView1.Refresh(); 

       } 
      } 
      catch (Exception m) 
      { 
       MessageBox.Show(m.Message); 
      } 

     } 
    } 



    } 

    public void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
    { 
     DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; 
     Form2 f2 = new Form2(); 

     f2.IDtext.Text = row.Cells["MESSAGE_ID"].Value.ToString(); 
     f2.ShowDialog(); 

    } 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 

     }  
} 
    } 

suivant est le code de Form2

public partial class Form2 : Form 
{ 

    public Form2() 
    { 
     InitializeComponent(); 

     } 


    private void button1_Click(object sender, EventArgs e) 
    { 

    /* if (f1 == null) 
     { 
      f1 = new Form1(); 
     } */ 
     Form1 f1x = Form1.getInstance(); 
     DataTable dt1 = new DataTable(); 
     f1x.dataGridView2.DataSource = dt1; 
     dt1.Columns.Add("MessageID", typeof(string)); 
     dt1.Columns.Add("Name", typeof(string)); 
      dt1.Columns.Add("Number", typeof(string)); 


     DataRow dr = dt1.NewRow(); 
     dr["MessageID"] = IDtext.Text; ; 
     dr["Name"] = nameText.Text; 
     dr["Number"] = numberText.Text; 
     dt1.Rows.Add(dr); 
     f1x.Show(); 
    } 
} 

J'ai écrit une méthode nommée getInstance() dans form1 pour y parvenir encore une nouvelle fenêtre s'ouvre. Je veux que les valeurs apparaissent dans le formulaire1 que j'ai chargé initialement mais les données sont affichées dans une nouvelle instance de form1. Comment puis-je afficher les données dans la form1 initiale que je chargé

+0

Vous ne remettras '' f1' dans Form1' avant d'appeler 'Form1.getInstance' si vous créez explicitement une nouvelle' Form1'. Pourquoi ne pas simplement passer une référence à l'existant Form1 à Form2 quand vous le créez? Vous pouvez également ajouter un événement à 'Form2' que vous gérez dans' Form1'. – oerkelens

+0

@oerkelens pouvez-vous donner un extrait de code pour cela? –

Répondre

0

Dans votre changement de code e construcor et getInstance à:

private static Form1 f1; 

public Form1() 
{ 
    InitializeComponent(); 
    f1 = this; 
    dbconnection = @" Data Source = D:\SQLite\SQLiteStudio\DB1.db ; version=3 "; 

} 

public static Form1 getInstance(){ 
     f1.BringToFront(); 
     return f1; 
} 

Note: ce n'est pas le plus élégant de code: vous pouvez ommettre statique trucs et injecter simplement l'instance de Form1 dans le constructeur de Form2 comme ceci:

... 
    Form2 f2 = new Form2(this); 
    ... 

et la formule 2:

Form1 f1x; 

    Public Form2(Form1 parentForm) 
    { 
     InitializeComponents; 
     f1x = form 
    } 

et OMMISSIONS le

Form1 f1x = Form1.getInstance(); 
+0

Thanx mate ça marche: D ce vissé mon jour: D –