2015-07-10 29 views
2

首先我知道這個問題已經有答案,但大多數解決方案似乎沒有任何複雜的。如何傳遞一個表單作爲參數?

現狀:

我有一個名爲的frm1形式。我希望把它作爲參數

myfunc(ref frm1) 

然後我會做

private void myfunc(ref Form frm1) 

It says : frm1 is a type but is used as a variable. 

我之所以這樣做,是因爲根據選擇,我通過我的表格的方式不同的填充它要麼兩個功能之一。

問題:

但我不能通過作爲參數我的形式。不過,我可以以同樣的方式傳遞其他控件,如按鈕。我怎樣才能做到這一點,簡單地與形式,沒有接口等...

+1

形式是一類。你的班級可能被稱爲Form1。 更改名稱從窗體 - > Form1,它可能工作(如果不發佈更多的代碼) – Blaatz0r

+1

你爲什麼使用'ref'?你可能不需要它。 – Rik

+0

如果他在他的形式中有大圖像(例如),我會使用參考。 – Blaatz0r

回答

3

你的方式傳遞參數的方式有問題。你是否肯定傳入的實例,而不是類型?

下面是一個工作示例。

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

     this.Name = "form"; 

     Form f = this; 

     doSomethingWithForm(f); 
    } 

    private void doSomethingWithForm(Form f) 
    { 
     Console.WriteLine(f.Name); 
    } 
} 
+0

非常感謝!通過這個而不是表單的名稱工作!可能因爲表單的名稱也被默認用作類名稱? – Cher

+0

您不需要傳遞任何參數。只需在方法內引用'this'即可。 –

+0

我不知道該方法將被使用的上下文,所以我添加了一個參數,以防萬一它不會駐留在同一個類中。您需要傳入的名稱將是引用Form1的特定實例的變量。看看你的項目中的program.cs。在那裏你將能夠看到form1的實例。 – kenjara

0

我創建了一個函數。我認爲它會幫助你。我在練習中使用這個。

- >以下功能:

public void showForm(Form _form, Form _main) { 
if (_main != null) 
{ 
if (_main.ActiveMdiChild != null) 
{ 
    _main.ActiveMdiChild.Close(); 
} 
_form.MdiParent = _main; 
_form.Activate(); 
_form.Show(); 
} 
else 
{ 
_form.Activate(); 
_form.ShowDialog(); 
} 

- >如何使用它:

objLib.showForm(new frmMain(), null); 

OR

objLib.showForm(new frmNewspaper(), this); 

謝謝