2017-04-19 64 views
0

我怎麼能叫位於Form類從另一個類的功能?在C#中從另一個類調用主窗體的功能

這是我code.I想打電話get_data(data)prog類?

謝謝。

public partial class Form1 : Form 
{ 
    get_data(int mydata) 
    { 
     //code 
    } 

    //code 
    prog var1=new prog(); 
    var1.start_data(); 
} 



public class prog 
{ 
    public void start_data() 
    { 
     Thread ct=new Thread(do); 
     ct.start(); 
    } 

    private void do() 
    { 
     int data=40; 
     get_data(data); ///?????????????this is wrog 
    } 
} 
+0

[這裏是一個偉大的回答這個(http://stackoverflow.com/問題/ 16226444 /如何對化妝的方法調用,另外一型類-C) –

+0

你最好不要呼籲其他線程不是GUI線程表的方法。在這種情況下,沒有任何問題,只要你不訪問'get_data()' –

+0

中的控件,最好的辦法是在創建另一個類時傳遞主Form的引用。比使用它像'myMainForm.get_data(data);' – Logman

回答

2

如果您需要訪問主窗體的當前實例,你可以通過它傳遞給類:

public partial class Form1 : Form 
{ 
    internal void get_data(int mydata)//Change to internal or public, as default is private 
    { 
     //code 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     prog var1 = new prog(); 
     var1.start_data(this);//pass along instance of your main form 
    } 
} 

public class prog 
{ 
    private Form1 MainForm; 
    public void start_data(Form1 form) 
    { 
     MainForm = form;//set form 
     Thread ct = new Thread(doSmt); 
     ct.Start(); 
    } 

    private void doSmt() 
    { 
     int data = 40; 
     MainForm.get_data(data); //use form 
    } 
} 
+0

非常感謝:-) –

0

在你可以調用另一個類的方法之前,你需要這個類的一個實例。一種方法是創建一個新的實例。

但我想,因爲它是一種形式的我猜你是在任何地方打開這個表格你也會有這樣的類已經實例;只是使用這個實例。

一個暗示:我不會把任何業務邏輯在我的形式。我會把它放在另一個班級。

private void do() 
{ 
    int data=40; 
    Form1 form = new Form1(); 
    form.get_data(data); 
} 

不要忘了讓GET_DATA方法公開,因爲你不能在其他類訪問它時,它是私有的。

+0

我這樣做,但這不工作正常; –

+1

@smk,因爲你沒有描述這種方法應該做什麼,我們不能猜測它是什麼意思:「不正常工作」。我們無法讀懂 –

+0

@smk是否正在訪問'get_data'方法中類Form1的任何變量?這是什麼意思,它不工作? –

1

的方法也不是一成不變的,所以你需要實際實例Form1類。

相關問題