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不在当前上下文中,我无法调用它。我得到了我想要的值,但无法将它们传递给表单。我知道这听起来很琐碎,但我就是无法得到它。
如果我理解的话,提供的代码片段在不同的类中。
在这种情况下,方法应该是公开的。
比如:
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"的方法。