2012-08-02 203 views
3

我有2個.cs文件,每個文件都有一個類。如何在Form2.cs中的另一個類的Form1.cs中的類中調用方法?在另一個.cs文件中使用一個.cs文件類的方法

看起來是這樣的......

Form1.cs 

public partial class Class1 : ClassContainer 
{ 
    public void awesomeMethod() 
     { 
     } 
} 

Form2.cs 

class Class2 : SomethingChanged 
{ 
    public void decentMethod() 
    { 
    } 
} 

我想打電話給awesomeMethod()的decentMethod內()。 謝謝。

+0

請分享這是爲什麼down vote – Garrett 2012-08-02 13:47:39

+0

你的問題不清楚。只需在Class2中引用Class1即可。當然,如果Class1實際上是一個表單,你並不是真的想這樣做。 – 2012-08-02 15:19:38

回答

5

你是說,像這樣?

public void decentMethod() 
{ 
    Class1 instance = new Class1(); 
    instance.awesomeMethod(); 
} 

您需要一個您希望調用該方法的類的實例。


或者,如果你並不需要/想用一個實例來工作,使它的方法靜態:

public partial class Class1 : ClassContainer 
{ 
    public static void awesomeMethod() 
    { 
    } 
} 

...

public void decentMethod() 
{ 
    Class1.awesomeMethod(); 
} 
+0

試圖說,不包含帶0參數的構造函數。我覺得我缺少一些簡單的東西,但這是一個艱難的一週。 – Garrett 2012-08-02 13:42:56

+0

那麼,構造函數是怎樣的呢? – sloth 2012-08-02 13:43:40

+0

謝謝,生病只是做靜態無效。我正在清理某人3k行代碼,並且我錯過了幾件事情 - 當時間限制已滿時,我不接受 – Garrett 2012-08-02 13:46:18

0

我猜這些不是真正的方法簽名。

請問awesomeMethod是否需要提及decentMethod的任何成員?

new Class1().awesomeMethod(); 
4

爲了調用一個類的實例方法,你需要一個類的實例:

如果不是這樣,因爲這將是一樣簡單。因此,要調用的Class1的awesomeMethod,你必須創建1類的一個實例:

Class1 c = new Class1(); 
c.awesomeMethod(); 

從你的開頭一段,但是,它聽起來就像是兩個實際的類是兩種不同的形式。在這種情況下,對於一種形式來說,創建另一種形式的新實例純粹是爲了瞭解可能的輔助方法 - 創建第二種形式可能是一種可怕的大量開銷並沒有意義。你最好把助手方法放到一個單獨的,更輕量級的類中。

0

以下是您可以在Visual Studio中嘗試的東西。寫你的使用的方法沒有的定義。例如,在你的代碼的某個地方,類型:

cls_a instance_a;

然後你得到下一個cls_a波浪線。右鍵單擊「cls_a」並從彈出菜單中選擇生成。然後看看會發生什麼。

我看到App_Code目錄已創建,並且類cls_a是在該目錄中的文件cls_a.cs中生成的。 Visual Studio生成了這個定義。它編譯。

您可以再鍵入使用的方法,而不從cls_a這樣的定義:

instance_a.meth_x();

同樣,在彎彎曲曲的線右鍵單擊並選擇生成。讓Visual Studio爲您生成定義。

我認爲ASP .NET要求你把你的其他類在App_Code子目錄。如果您需要按照自己的方式彎曲ASP.NET,我認爲可以編輯Web.config文件,以便您可以將代碼文件放在任何位置。我還沒有審查如何做到這一點,所以我把它留給你或其他人。

反正沒有你的類和App_Code文件子目錄方法可能會導致你的類和函數不要在Web表單代碼中可以看出,即使一切是正確的。

0

好吧我在這個初學者,不知道同樣的事情。我相信我明白你在問什麼。我只是嘗試過這一點,經過幾次嘗試就點擊了,並且更新一些,也許我可以用我的話來簡化它。我不知道你正在使用哪個程序,但我使用了Visual Studio 2016.我創建了兩個窗體(Form1和Form2),每個窗體都包含一個按鈕。 Form1按鈕和Form2按鈕。當我點擊Form1按鈕時,它會從form2調用一個方法,當我點擊Form2按鈕時,它會從Form1中調用一個方法。我注意到在解決方案資源管理器中它顯示了兩種形式,以及它們包含的所有內容我做了大量的研究,並糾正我,如果我錯了,但我相信順序是這樣從父容器到子(名稱空間>類>方法)。相信這是真實的,我認爲我需要在調用該方法之前給該類調用。

這些是我的腳本。

Form1中:

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

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     frm2.Show(); 
    } 

    private void f1button_Click(object sender, EventArgs e) 
    { 
     f2Words f2w = new f2Words(); 
     f2w.Words2(); 

    } 
} 
public class f1Words 
{ 
    public void Words1() 
    { 
     MessageBox.Show("Form 1 Method Calling Worked!"); 
    } 
} 

窗體2:

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

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void f2button_Click(object sender, EventArgs e) 
    { 
     f1Words f1w = new f1Words(); 
     f1w.Words1(); 

    } 
} 
public class f2Words 
{ 
    public void Words2() 
    { 
     MessageBox.Show("Form 2 Method Calling Worked!"); 
    } 
} 

在解決方案瀏覽器窗口它同時顯示Form 1和Form的類。所以我決定嘗試調用這些類的新實例。

「f1Words f1w =新f1words()」 和 「f2Words f2w =新f2Words()」。

再經過這個權利我叫類的這些新情況下,與他們中的方法發揮。

「f1w.Words1()」 和 「f2w.Words2()」

最終的結果是成功的。當我點擊Form1的Button1時,它調用了Form2的F2Words類,並從中打開了一個消息框,提示「Form2 Method Calling Worked!」,反之亦然Form2 Button2。

由於這個職位是4歲我假設你已經發現了這一點,你自己或許找到了一個更好的解決方案,但對於其他人詢問,今後我希望同樣的問題這可以幫助你。

0

假設主窗體是frmMain。在frmMain()的構造函數外進行靜態聲明;爲其分配一個相同的構造函數中:

public static frmMain p_frmMain = null; 
public frmMain() 
{ 
    InitializeComponent(); 
    : 
    p_frmMain = this; 
} 

從另一個類(使用主要的命名空間在同一個解決方案),打電話,說,主要的「btnHelloWorld_Click()」方法:

AnotherClass_EventHandler(object sender, EventArgs e) 
{ 
: // Call frmmain()'s 'btnHelloWorld_Click' event: 
    frmMain.p_frmMain.btnHelloWorld_Click (sender, e); 
: 
} 
// Quick, dirty and done.