2012-11-17 97 views
0

我在我的項目中有2個窗體。 Form1是主窗體。在那裏,我有一個按鈕來打開Form2,一個ListView和一個方法來調用一個url,併爲ListView提供它從url獲得的數據。Form2 Form1上的C#訪問方法

Form2有一個URL和一個按鈕「好」的文本框。

當我按下Form1上的按鈕時,它會打開Form2,沒問題。 我如何管理它將URL傳遞給Form1中的方法,如果我在Form2的文本框中輸入一個URL並按下確定?

,如果我做

Form1 form1 = new Form1(); 
form1.method(); 

它顯然會打開Form1的一個新的實例,執行的方法有,並填寫列表框那裏卻沒有關於我原來的Form1上。

我在網上發現了這個問題的各種解決方案,但是他們太複雜或者他們不工作。

我怎麼能這樣說,它實際上執行我已經有的Form1上的方法,因此加載正確的列表框的值?

非常感謝

回答

4

Form2定義事件,並提高它時,輸入的網址:

public class Form2 : Form 
{ 
    public event EventHandler UrlEntered; 

    private void ButtonOK_Click(object sender, EventArgs e) 
    { 
     if (UrlEntered != null) 
      UrlEntered(this, EventArgs.Empty); 
    } 

    public string Url { get { return urlTextBox.Text; } } 
} 

訂閱Form1上該事件:

Form2 form2 = new Form2() 
form2.UrlEntered += Form2_UrlEntered; 
form2.Show(); 

處理此事件:

private void Form2_UrlEntered(object sender, EventArgs e) 
{ 
    Form2 form2 = (Form2)sender; 
    string url = form2.Url; 
    // use it 
} 

此外,您還可以使用自定義事件參數定義類型爲EventHandler<UrlEnteredEventArgs>的事件,該事件將爲用戶提供輸入的url。

+2

綜合是的!你可以在互聯網上很容易地找到很多有關事件的代碼示例...如果這個答案不夠完整。 –

-1

它會創建一個新實例,因爲您正在調用新的

您可以循環使用Application.OpenForms並檢查表單名稱。找到Form1後,可以方便地調用它的public方法;

Form1(Application.OpenForms[0] as Form1).method(); 
0

定義Form 2上的特性,以允許結果

// In Form2 
public string Url { get { return urlTextBox.Text; } } 

的訪問在Form1

var form2 = new Form2(); 
form2.ShowDialog(this); 
string url = form2.Url; 

注意:除非Show()ShowDialog()方法等待直到form2被關閉。

ShowDialog參數this是要打開的表單的所有者。它將form2綁定到form1,並使其始終顯示在form1之上。

1

看一看:

//In Form1 opening Form2 
Form2 frm = new Form2(); 
frm.Owner = this; 
frm.Show(); 

//Example to call methods in FORM1 from FORM2 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form1 frmParent = (Form1)this.Owner; 
    frmParent.testeFunction(); 
    frmParent.InsertInGrid(textBox1.Text); 
} 

所以,基本上你需要創建一個Form1的函數從窗體2調用(傳遞參數)。 我希望這可以幫助。