2015-03-31 32 views
0

我試圖從創建它的方法傳遞一個表單對象到將顯示它並設置它的一些屬性,而不是每個按鈕事件中的smae代碼。即時得到錯誤傳遞表單對象到另一個方法

「參數1:無法從‘參考RWCStatTracker.Fixture.FRMAddFixture’到
‘裁判System.Windows.Forms.Form中’轉換」和「「RWCStatTracker的最佳重載的方法匹配。 Form1.showForm(REF System.Windows.Forms.Form中)」有一些無效參數」

這些都是存在的對在它具有showForm(ref frm)按鈕點擊事件線70;

下面是代碼:

public void addToolStripMenuItem3_Click(object sender, EventArgs e) 
    { 
     RWCStatTracker.Fixture.FRMAddFixture frm = new RWCStatTracker.Fixture.FRMAddFixture(); 
     showForm(ref frm); 
    } 

    public void showForm(ref Form frm) 
    { 
     frm.TopLevel = false; //set it's TopLevel to false 

     Controls.Add(frm); //and add it to the parent Form 
     frm.Show(); //finally display it 

     frm.BringToFront(); //use this it there are Controls over your form. 
    } 

我發現在谷歌的文章很多,但沒有一個是真正實現什麼IM努力實現

任何想法,我怎樣才能使這項工作?

+0

爲什麼它是showForm(ref Form frm)而不是showForm(Form frm)? – 2015-03-31 08:59:38

+1

RWCStatTracker.Fixture.FRMAddFixture它與Form不同......很明顯,你不能將它作爲參數傳遞。你錯過了一些演員? – MajkeloDev 2015-03-31 09:00:13

+3

不會FRMAddFixture從Form繼承嗎? – 2015-03-31 09:00:43

回答

0

解決方法1:

相反的:

public void showForm(ref Form frm) 

聲明你的方法是這樣的:

public void showForm(ref RWCStatTracker.Fixture.FRMAddFixture frm) 

溶液2:

如果RWCStatTracker.Fixture.FRMAddFixture是 「可轉換」 來表單類型 - 在將它作爲方法參數傳遞之前進行轉換。

順便說一句。

就像之前說過的 - 在這裏你不需要引用,所以你可以在你的方法中刪除這個關鍵字。

+0

並刪除所有不必要的'ref'modifiers – DrKoch 2015-03-31 09:04:15

+0

沒有這樣做會挫傷showForm方法的目的,因爲它將被其他按鈕事件使用,這與「FRMAddFixture」不同,但我設法通過使用showForm( FRM);而不是 – 2015-03-31 09:05:54

0

嘗試使用C#通用方法:

RWCStatTracker.Fixture.FRMAddFixture frm = new RWCStatTracker.Fixture.FRMAddFixture(); 

showForm<RWCStatTracker.Fixture.FRMAddFixture>(ref frm); 

public static void showForm<T>(ref T frm) where T:class 
     { 
      if (typeof(T) is RWCStatTracker.Fixture.FRMAddFixture) 
      { 
       //add logic here 
      } 
     } 
+2

如果您必須驗證第一行中的類型,則它不完全是通用的。 – Sayse 2015-03-31 09:25:50

0

通過使用showForm(FRM)固定的問題;而不是showForm(ref frm);

相關問題