1

我有一个小问题给我带来了一些问题,我相信这并不难,但对我来说现在是。

我有两个类,一个主类和我的winform类。

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

在这里,我获取值并尝试通过此方法将它们写入 Datagrid:

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

如果我理解的话,提供的代码片段属于不同的类。

在这种情况下,该方法应该是公开的。

像那样:

public 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;
}
于 2013-07-18T13:45:39.710 回答
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 回答