2016-10-28 74 views
-1

我希望標題足夠清晰。讓我解釋一下:我正在做一個C#Winform應用程序。當我啓動應用程序時,我有我的表格1開始,我還可以通過點擊按鈕打開其他表格。從第一種形式調用另一個表單功能

的問題是,我有功能在這些形式(形式2,形式3,形式4 ..)我想從表1啓動。

目前這裏是我的代碼

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    // First Event, when I click in the toolstrip menu, I open the Form2 ("Ligne3") 
    private void ligne3ToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     var Ligne3 = new Ligne3(); 
     Ligne3.Show(); 
    } 

然後,我有分量的窗體2(textboxs,按鈕功能等)

​​

我如何開始我的 「SEND_EMAIL()」 函數從Form1(例如在加載事件期間)?

+1

var ligne3 = new Ligne3(); ligne3.send_email()? – mybirthname

+0

@mybirthname此解決方案不需要爲Form2中的郵件設置設置參數。它在調試期間會引發錯誤 – Alex

+0

因此,請預先設置此設置或將它們作爲依賴關係添加到方法簽名中。 – mybirthname

回答

0

在調用show之前,將值爲Form2或任何其他對象/變量分配給Linge3對象。在致電send_email()之前,send_email()需要分配的值。像下面的東西。

private void ligne3ToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     var ligne3 = new Ligne3(); 
     //define variables/properties in Ligne3 for all values to be passed 
     //then assign them with corresponding values 
     ligne3.Value1 = objForm2.Value1; 
     ligne3.Value2 = objForm2.Value2; 
     ligne3.Value3 = objForm2.textBox1.Text; 
     ligne3.Value3 = objForm2.checkBox1.Value; 
     //and so on 
     ligne3.send_email(); 
     ligne3.Show(); 
    } 
+0

好吧,但如何「知道」文本框和Form1的其他可視化組件(Ligne 3)的存在?我已經分配了所有變量,但Form1無法識別Form 2 – Alex

+0

添加的代碼以訪問Form2的文本框和複選框的文本框 –

+0

確定其正常工作。非常感謝你 – Alex

0

如果你點擊Form1上放置一個按鈕,啓動和開放的形式等2,3,4,和那些btn_click處理程序要創建一個new窗口2,3,3,4。然後你將有一個對每個表單的引用,因此只需要在剛剛創建的實例上調用相應的公共方法。例如

public class Form1 
{ 
    private Form2 subForm2; 

    private void OpenForm2_Click(object sender, eventargs e) 
    { 
     subForm2 = new Form2(); 
     subForm2.Show() 
    } 

    private void sendEmailBtn_Click(object sender, EventArgs e) 
    { 
     subForm2.Send_email(); 
    } 
} 

這許多事情錯了上述從設計的角度來看,但我只是用它來表述思想。 如果您在Form1的實例化之外創建Form2,3,4等的實例,那麼您需要某種形式的構造函數或屬性注入來提供實例引用。