2016-03-20 14 views
1

İki formları var Form1 ve Form bu Form1 olduğunu başka bir formdan bir formda bir düğme çağırma

Form1

yılında datagridview yenilemek amacıyla Form2 den Form1'da bir düğme erişmesi gereken 2.:

private void BookLoad() 
    { 
     DataSet d = new DataSet(); 
     SqlCommand com = new SqlCommand("select * from Books ", cn); 
     SqlDataAdapter da = new SqlDataAdapter(com); 
     da.Fill(d, "Books"); 
     dataGridView2.DataSource = d; 
     dataGridView2.DataMember = "Books"; 

     DataSet ds = new DataSet(); 
     SqlCommand cmd = new SqlCommand("select * from Issue where StudentNumber LIKE @number", cn); 
     cmd.Parameters.AddWithValue("@number", textBox1.Text); 
     da = new SqlDataAdapter(cmd); 
     da.Fill(ds, "Issue"); 
     dataGridView1.DataSource = ds; 
     dataGridView1.DataMember = "Issue"; 

     DataSet dss = new DataSet(); 
     SqlCommand cmdd = new SqlCommand("select Books_Borrowed,Date_Borrowed,Return_Date,Quantity from Issue where StudentNumber = @number", cn); 
     cmdd.Parameters.AddWithValue("@number", textBox1.Text); 
     da = new SqlDataAdapter(cmdd); 
     da.Fill(dss, "Issue"); 
     dataGridView3.DataSource = dss; 
     dataGridView3.DataMember = "Issue"; 

    } 


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


    private void button10_Click(object sender, EventArgs e) 
    { 
     BookLoad(); 
     MessageBox.Show(); 
    } 

Ben Form2

den
+0

'Form10'da' button10'yu 1'den tetiklemek için kullanmak istediğiniz eylem nedir? –

+0

Form 2'de bir düğmeyi tıklattığımda, bazı şeyler yapar ve veritabanına bir şeyler ekler ve sonra kendini gizler. Form 1'i yenilemek için button10'a erişmem gerekiyor – Nemo

cevap

0

gibi Form2 bu işlevini çağırın. gerçekten'un Form1 üzerindeki denetimlere erişememesi gerekir.

Çok daha basit bir şey, ilk

private void button2_Click(object sender, EventArgs e) 
{ 
    Form2 form = new Form2(); 
    DialogResult r = form.ShowDialog(); 
    if (r == DialogResult.OK) 
    { 
     BookLoad(); 
     MessageBox.Show(); 
    } 
} 
-1

Bu iyi bir yaklaşım değildir button10 erişmesi gereken ancak bunu istiyorsa bu Form1'da statik işlevi ekleyin:

public static void btnDown(){ 
    SomeButton.Invoke(); 
} 

Şimdi Form2 Bir düzenleme iletişim çeşit görünüyor

Form1.btnDown(); 
1

ilk şey (Form2 zaman button2 defalarca tıklayın Birden açabilirsiniz Show yöntemini kullanarak) ShowDialog() yöntemi kullanılarak modal olarak Form2 açmak Hide() ile oynarken biraz temkinli olmak ve Show(), form görünmez olduğunda birkaç şey beklendiği gibi çalışmayabilir.

ideal çözüm

public delegate void Listen(object sender, EventArgs args); 

// Expose the event off your component 
public event Listen ListenChange; 

tutulur (Form2 bu mantık tutulur) belirtilen Form2 bir temsilci bildirmek Form2 bir olayı tanımlamak ve Form1

alması durumunda abone, işlevselliği elde etmek için Bu mantık, formun gizlenmesinden hemen önceolayının içinde Form2.

// And to raise it 
if (ListenChange != null) 
{ 
    ListenChange(this, new EventArgs()); 
} 

Şimdi Form1 bu etkinliğe abone olup değişikliği artırın.

Form2 form = new Form2(); 
form.ListenChange += (s, ev) => button10.PerformClick(); 
form.Show(); 
İlgili konular