0

私は2つのクラスを持っています:

mainGUIpreferencesGUI

ボタンが押されるたびに、というmainGUIクラスのメソッドを呼び出したい。やろうとしても、何も起こりません。updateGUIapplychanges

ここに私のクラスがあります:

updateGUI:

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]);
}

PreferencesGUI のボタン クリック イベント ハンドラ:

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

助けてくれてありがとう。

4

1 に答える 1

3

まず、preferenceGUI がこの呼び出しを行っているときに、mainGUI が既に開いていると想定しています。したがって、これを行うと:

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

あなたがしているのは、mainGUI の新しいインスタンスを作成し、それを範囲外にすることだけです。そうです、何もしません。

これは、GUI 開発ではよくあるハードルです。さまざまなコンポーネントが互いに認識できるようにするにはどうすればよいですか。人々が最初に試すアプローチの 1 つは、シングルトンです。ただし、コンポーネントの複数のインスタンスが必要な場合、これは問題を引き起こす可能性があり、実際には面倒です。コントロールのインスタンスを渡すことをお勧めしますが、preferenceGUI クラスが 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 は、GUI の更新が必要なときに通知できるようになりました。したがって、mainGUI から PreferencesGUI インスタンスを作成するときは、次のようにイベント ハンドラーをアタッチします。

preferencesGUI preferences = new preferencesGUI();
preferences.RequestGUIUpdate += new Action(updateGUI);
于 2012-12-10T17:34:02.120 に答える