1

いくつかの問題を引き起こす小さな質問がありました。難しいことではないと確信していますが、今の私にとってはそうです。

メインクラスと私のwinformのクラスの2つのクラスを取得しました。

 foreach (EA.Element theElement in myPackage.Elements)
  {
  foreach (EA.Attribute theAttribute in theElement.Attributes)
    {
     attribute = theAttribute.Name.ToString();
     value = theAttribute.Default.ToString();
     AddAttributeValue(attribute, value);
     }
    }

ここで値を取得し、次のメソッドを使用してデータグリッドに書き込もうとします。

private void AddAttributeValue(string attribute, string value)
    {
        int n = dataGridView1.Rows.Add();
        dataGridView1.Rows[n].Cells[0].Value = attribute;
        dataGridView1.Rows[n].Cells[1].Value = value;
    }

しかし、コンパイラは、 AddAttributeValue が現在のコンテキストにないため、呼び出すことができないことを教えてくれます。必要な値を取得しましたが、フォームに渡すことができません。些細なことに聞こえるかもしれませんが、理解できません。

4

2 に答える 2

1

「AddAttributeValue」を公開します。

public void AddAttributeValue(string attribute, string value)

補遺:

以下の私のコメントによると、コールバックを実装する方法は次のとおりです。これにより、参照するインスタンスメンバーがない場合に、メインクラスが winform 内のメソッドを呼び出せるようになります。

MainClass は次のようになります。

public static class MainClass
{
    public delegate void AddAttributeValueDelegate(string attribute, string value);

    public static void DoStuff(AddAttributeValueDelegate callback)
    {
        //Your Code here, e.g. ...

        string attribute = "", value = "";

        //foreach (EA.Element theElement in myPackage.Elements)
        //{
        //    foreach (EA.Attribute theAttribute in theElement.Attributes)
        //    {
        //        attribute = theAttribute.Name.ToString();
        //        value = theAttribute.Default.ToString();
        //        AddAttributeValue(attribute, value);
        //    }
        //}
        //
        // etc...
        callback(attribute, value);
    }
}

次に、Winform クラスで、次のようにメソッドを呼び出します。

MainClass.DoStuff(this.AddAttributeValue);

つまり、「DoStuff」が完了すると、「AddAttributeValue」というメソッドが呼び出されます。

于 2013-07-18T13:43:06.423 に答える