2012-12-10 49 views
0

叫我有兩個類:方法從另一個類不工作

mainGUIpreferencesGUI

我要打電話每次按下按鈕時,在被稱爲updateGUImainGUI類中的方法。但當我嘗試這樣做時,沒有任何反應。

這裏是我的課:

updateGUI:上preferencesGUI

public void updateGUI() 
{ 
    String[] colors = (Regex.Split(File.ReadAllText(prefpath), ",")); 
    int[] colori = new int[colors.Length]; 
    for (int x = 0; x < colors.Length; x++) 
    { 
     colori[x] = Convert.ToInt32(colors[x].ToString()); 
    } 
    preferencesGUI pg = new preferencesGUI(); 
    pg.R1 = colori[0]; 
    pg.G1 = colori[1]; 
    pg.B1 = colori[2]; 
    pg.R2 = colori[3]; 
    pg.G2 = colori[4]; 
    pg.B2 = colori[5]; 
    outputbox.ForeColor = Color.FromArgb(colori[0], colori[1], colori[2]); 
    outputbox.BackColor = Color.FromArgb(colori[3], colori[4], colori[5]); 
    eventlist.ForeColor = Color.FromArgb(colori[0], colori[1], colori[2]); 
    eventlist.BackColor = Color.FromArgb(colori[3], colori[4], colori[5]); 
} 

按鈕單擊事件處理程序:

private void applychanges_Click(object sender, EventArgs e) 
{ 
     mainGUI mg = new mainGUI(); 
     mg.updateGUI(); 
} 

感謝您的幫助。

回答

3

首先,我假設mainGUI已經打開時preferencesGUI正在此調用。所以,當你這樣做:

private void applychanges_Click(object sender, EventArgs e) 
{ 
     mainGUI mg = new mainGUI(); 
     mg.updateGUI(); 
} 

所有你正在做的是創造mainGUI的新實例,然後讓它掉下來的範圍,從而是的,它什麼都不做。

這是GUI開發一個很常見的障礙。你如何獲得不同的組件以相互瞭解。人們最初嘗試的一種方法是單身人士。但是,如果你想要的組件的多個實例,實際上它只是有種雜亂這可能會導致問題。更好的方法是在控制的情況下通過,但因爲它要求preferencesGUI類知曉mainGUI類的這樣的設計是不是非常模塊化。

相反,你應該像這樣創建preferencesGUI內的事件:

class preferencesGUI 
{ 
    // ... Some code ... 
    public event Action RequestGUIUpdate; 
    protected void OnRequestGUIUpdate() { if (this.RequestGUIUpdate == null) return; RequestGUIUpdate(); } 

    // ... Some more code ... 

    private void applychanges_Click(object sender, EventArgs e) 
    { 
     OnRequestGUIUpdate(); 
    } 

    // ... Some more code ... 
} 

所以現在preferencesGUI能夠在一個界面更新是必要的通知。因此,當您從mainGUI創建preferencesGUI實例時,請附加如下事件處理程序:

preferencesGUI preferences = new preferencesGUI(); 
preferences.RequestGUIUpdate += new Action(updateGUI); 
+0

太棒了!這對我很好,很好地解釋,非常感謝:D – user1892282