C#:main类和winforms类之间的通信.无法传递数据

本文关键字:通信 数据 之间 main 类和 winforms | 更新日期: 2023-09-27 18:23:43

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

我上了两节课,一节是主课,另一节是我的冬季班。

 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不在当前上下文中,我无法调用它。我得到了我想要的值,但无法将它们传递给表单。我知道这听起来很琐碎,但我就是无法得到它。

C#:main类和winforms类之间的通信.无法传递数据

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

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

比如:

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

将"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"的方法。