2015-08-26 33 views
0

我做了一個「開始」類,表單類和一個加法器類。調用方法不起作用

我想物品Form1中添加到listBox1中從加法器類...

...但它沒有做到這一點!

沒有錯誤或類似的東西,當我調試它,它似乎工作,但點擊按鈕2後有ListBox中的任何項目(我將在它的代碼標記)

我知道我在類Form1中調用AddValue()函數(然後它可以工作......我不知道爲什麼),但是我想從另一個類中完成它,因爲這不是洞程序,而只是產生問題的一塊。

namespace WindowsFormsApplication4 
{   

public partial class Form1 : Form 
{ 
    ProcessStartInfo processInfo; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     string command2 = "ipconfig"; 
     string command = "telnet " + comboBox1.Text + " 13000"; 
     processInfo = new ProcessStartInfo("cmd.exe", "/k " + command2); 
     Process process = Process.Start(processInfo); 
    } 

    public void AddValue(string value) 
    { 
     listBox1.Items.Add(value); 
    } 

    private void button2_Click(object sender, EventArgs e) // here it "starts" 
    { 
     Adder adder_objet = new Adder(); 
     adder_objet.Add(); 
    } 
} 
public class Adder 
{ 

    public void Add() 
    { 
     Form1 form1_objet = new Form1(); 
     form1_objet.AddValue("sfdg"); 
    } 

} 
} 
+3

'new'創建一個新的* *實例,所以是的,你打開一個新的形式,sfdg'的'值添加到它,那麼方法結束,'form1_objet'超出範圍和表單處理。 – Sayse

回答

1

並不完全相信你的設計,但這將解決它:

public class Adder 
{ 

    public void Add(Form1 myForm) 
    { 
     myForm.AddValue("sfdg"); 
    } 

} 

然後在點擊:

private void button2_Click(object sender, EventArgs e) // here it "starts" 
{ 
    Adder adder_objet = new Adder(); 
    adder_objet.Add(this); 
} 
+0

謝謝你幾乎是我想要的;) –

+0

但是我怎樣才能調用添加功能,而不使用「this」?...它的作品如果button2_click在Form1中類,但我可以直接調用它也直接像 –

+0

listBox1.Items.Add(「rfg」) –

1

Adder類不增加的Form1同一個實例。試圖修改這樣的:

公共類加法 {

public void Add(Form1 form1_objet) 
{ 
    form1_objet.AddValue("sfdg"); 
} 

}

然後調用它像這樣:

private void button2_Click(object sender, EventArgs e) // here it "starts" 
    { 
     Adder adder_objet = new Adder(); 
     adder_objet.Add(this); 
    } 
+0

我正在和你一起打字。請注意,當從事件中調用Form1時,將Form1傳遞給Adder的構造函數,但Adder類在Add方法中期待它 – GinjaNinja

+0

@GinjaNinja謝謝!我糾正了它。這就是當你不使用IDE時會發生什麼:) – Nevca

0

你調用的Form1一個新實例AddValue

而是創建一個返回您在Program類此

MainForm = new Form1(); 
Application.Run(MainForm); 
創建的過程中 Application.Run

聲明這個實例

public static Form1 MainForm { get; private set; } 

並更換Application.Run主窗體的靜態屬性

您可能還想讓您的Program類上市。

最後在您的Adder.Add方法中,您必須致電Program類中的MainForm屬性。

public class Adder 
{ 
    public void Add() 
    { 
      Form1 form1_objet = new Form1(); 
     form1_objet.AddValue("sfdg"); 
    } 
} 

當然有,我想在這裏看到的修改,除非你真的需要的Adder一個新的實例,然後每次申報Add方法,靜態的,也許是類作爲一個整體,像這樣的幾件事情

public static class Adder 
{ 
    public static void Add() 
    { 
     Form1 form1_objet = new Form1(); 
     form1_objet.AddValue("sfdg"); 
    } 
} 

當然上面的一些取決於你將如何使用它等等。

截至目前,這應該是你想要做的。

#Edit - 1

您也可以通過Form1作爲一個變量您Adder類,如果你不希望它靜態或把它傳遞給Add方法。

例1

public class Adder 
{ 
    private Form1 _form1; 

    public Adder(Form1 form1) 
    { 
     _form1 = form1; 
    } 

    public void Add() 
    { 
     _form1.AddValue("sfdg"); 
    } 
} 

例2

public class Adder 
{ 
    public void Add(Form1 form1) 
    { 
     _form1.AddValue("sfdg"); 
    } 
} 

我會說使用例1如果你打算使用比一個地方form1更多在之內3210,否則請與例2

#Edit - 2

要詳細說明你的實際代碼,那麼你有什麼來代替這個得到它的「工作」是這樣的。

private void button2_Click(object sender, EventArgs e) // here it "starts" 
{ 
    Adder adder_objet = new Adder(); 
    adder_objet.Add(); 
} 

隨着

private void button2_Click(object sender, EventArgs e) // here it "starts" 
{ 
    Adder adder_objet = new Adder(); 
    adder_objet.Add(this); 
} 

而且

public class Adder 
{ 

    public void Add(Form1 form1_object) 
    { 
     form1_objet.AddValue("sfdg"); 
    } 

} 
+0

Hi Bauss,我認爲你在創建表單的公共靜態實例方面沒有幫助,在這種情況下你不會使用它 - 你不會在你的文章的任何其他例子中使用它,所以它不會以任何方式對答案做出貢獻。 – GinjaNinja

+0

如果你讀了我所說的話'當然,上面的一些取決於你將如何使用它等等。「除非必要,否則將進一步解釋是沒有意義的。但是,在大多數情況下,您希望在其他表格和/或類別之間共享表格(技術上這是表格)。 – Bauss