通常、イベントまたはデリゲートを使用して、一部のデータをClassB
から(つまり2クラス以上)に更新します。ClassA
私がする必要があるのは、から更新することですClassA
(ClassC
とを介してClassC
開かれます)。したがって、からへの直接アクセスはありません。ClassA
ClassB
ClassC
ClassA
で追加のコードを実行する必要がないように、これはどのように可能ClassB
ですか?
例:
class ClassA
{
private void OpenClassB()
{
ClassB b = new ClassB();
b.WorkOnB();
}
public void UpdatingFromClassC()
{
// I have to call this method from ClassC (from method WorkOnC)
}
}
class ClassB
{
public void WorkOnB()
{
//...
//and:
OpenClassC();
}
private void OpenClassC()
{
ClassC c = new ClassC();
c.WorkOnC();
}
}
class ClassC
{
public void WorkOnC()
{
//call UpdatingFromClassC() method on form1 from here!
}
}
私が嫌いなのは、Form1の参照を渡すことです。イベントまたはデリゲートを使用する必要があります–可能な限り最良のオプションです。
---
もっとはっきりさせておきます。私はWindowsフォームを作成します。2つのクラスの例を次に示します。
public partial class Form1 : Form
{
Class1 c1;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (c1 == null)
{
c1 = new Class1();
c1.OnDoWork += new Action(From_Class1_OnDoWork);
c1.DoSomeWork();
}
}
private void From_Class1_OnDoWork()
{
//put your code into here for refreshing
MessageBox.Show("Form1 is being refreshed!");
}
}
class Class1
{
public event Action OnDoWork;
public Class1()
{
//constructor
}
public void DoSomeWork()
{
System.Windows.Forms.MessageBox.Show("Do some work in Class 1");
if (OnDoWork != null)
{
OnDoWork();
}
}
}
次に、Class1から開く別のフォーム(Form2)を作成します。Form1のメソッドをForm2からウェイクアップする(またはデータを渡す)必要があります。
私はあなたがポイントを得たことを望みます。