2013-10-25 18 views
0

在總帳中,當用戶雙擊dgv行時,採購發票窗體將打開並顯示相關的採購發票。如果採購發票已經在的MdiParent開放的,它只會激活,這種情況下我申請支票如何將參數傳遞給form.Activate();而不是form.Show();

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string invNo = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); 
    foreach (Form f in Application.OpenForms) 
    { 
    if (f.GetType() == typeof(PurchaseForm)) 
    { 
     f.Visible = true; 
     f.Activate(); 
     ..... 
    } 
    .... 
    } 
    .... 
} 

我要傳遞的參數


PurchaseForm form = new PurchaseForm(); 
form.btnNewInvoice.PerformClick(); 
form.txtInvoiceNo.Text = invNo; 
form.dataGridView1.Focus(); 

它不工作和不能通過PARAMETER,這是什麼解決方案?

return; 
     } 
    } 

    PurchaseForm form = new PurchaseForm(); 
    form.MdiParent = MainForm.ActiveForm; 
    form.Show(); 

    form.btnNewInvoice.PerformClick(); 
    form.txtInvoiceNo.Text = invNo; 
    form.dataGridView1.Focus(); 
} 
+2

只是一個構造函數或公共方法添加到窗體類讓你通過任何你想要的。 –

+0

你真的不應該在你的表單上的控件公開,他們不應該被另一個外部類搞砸了;表單應該簡單地公開方法/屬性,只允許外部調用者需要執行的功能被調用,然後表單本身應該擔心對其內部控件的操縱;它們應該是實現細節,而不是公共API的一部分。另外,不是在'openforms'中查找表單,而是使用您打開的表單實例的私有字段。 – Servy

回答

0

不知道,但在我看來,要執行這個代碼:

form.btnNewInvoice.PerformClick(); 
form.txtInvoiceNo.Text = invNo; 
form.dataGridView1.Focus(); 

爲當表單已經打開。你說,「它不工作,不能通過PARAMETER」。很可能你想在下面的代碼片段中使用「f」?

if (f.GetType() == typeof(PurchaseForm)) 
{ 
    f.Visible = true; 
    f.Activate(); 
    ..... 
} 

如果是這樣,只投 「F」 到PurchaseForm這樣的:

if (f.GetType() == typeof(PurchaseForm)) 
{ 
    PurchaseForm pf = (PurchaseForm)f; 

    pf.btnNewInvoice.PerformClick(); 
    pf.txtInvoiceNo.Text = invNo; 
    pf.dataGridView1.Focus(); 

    pf.Visible = true; 
    pf.Activate(); 
    ..... 
} 

編輯:什麼Servy談論的簡單例子...

基本上你想創建一個公開的方法來收取發票號碼。該方法可以直接訪問控件並設置值。事情是這樣的:

public partial class PurchaseForm : Form 
{ 

    public void SetInvoiceNumber(string invNo) 
    { 
     this.Visible = true; 
     this.Activate(); 

     this.txtInvoiceNo.Text = invNo; 
     this.btnNewInvoice.PerformClick(); 
     this.dataGridView1.Focus(); 
    } 

} 

然後,鑄造「F」到PurchaseForm(如前所示)後,你只是做:

if (f.GetType() == typeof(PurchaseForm)) 
{ 
    PurchaseForm pf = (PurchaseForm)f; 
    pf.SetInvoiceNumber(invNo); 
} 
+0

其工作,謝謝 –

+0

很高興聽到它。不過,我同意Servy上面的評論。這是一個糟糕的設計。 –

+0

如果你有更好的主意,請告訴我。 –