我需要从位于另一个类中的数组中读取数据。我已经阅读了一些解释相同问题的线程,但无法使用我的代码......
包含的示例:我需要将ParticipantX
类中的数据从Parsedata
类读取到Form1
类,如我的示例所示。
我真的很感激任何帮助。如果你能帮助我提供我需要的代码,那就最好了。我现在卡住了。感谢。
public class Parsedata
{
public void ParsedataMethod()
{
...
//Neccesary data are added to this array
string[,] ParticipantX = new string[40, 4];
在同一个命名空间中,我有Form1类:
using Crestron.ActiveCNX;
public partial class Form1 : Form
{
ActiveCNX cnx;
cnx = new ActiveCNX();
private void SerialSend_Click(object sender, EventArgs e)
{
int number = 8;
for (int i = 1; i < number; i++)
cnx.SendSerial(i, ParticipantX[i, 1]); //
}
答案 0 :(得分:2)
您可以通过委托+事件处理程序传递它,例如:
public partial class Form1 : Form
{
public string[,] ParticipantX;
public Form1()
{
InitializeComponent();
Class1.SendArray += new EventHandler<MyArgs>(GetArray);
}
public void GetArray(object sender, MyArgs ea)
{
this.Invoke(new MethodInvoker(
delegate()
{
ParticipantX = ea.myArray;
}));
}
private void Form1_Load(object sender, EventArgs e)
{
Class1 t = new Class1();
t.ParsedataMethod();
}
}
public class MyArgs : EventArgs
{
public string[,] myArray { get; set; }
}
在您的解析数据类中,如果要将数组传递给表单,请调用OnArraySend
:
public static event EventHandler<MyArgs> SendArray;
public void ParsedataMethod()
{
string[,] ParticipantX = new string[40, 4];
OnArraySend(new MyArgs() { myArray = ParticipantX });
}
protected virtual void OnArraySend(MyArgs ea)
{
if (SendArray != null)
{
SendArray(this, ea);
}
}
这是一个粗略的例子,但你得到了一般的想法
答案 1 :(得分:1)
试试这个:
public class Parsedata
{
private string[,] m_ParticipantX;
public void ParsedataMethod()
{
...
m_ParticipantX = new string[40, 4];//Neccesary data are added to this array
}
public string[,] ParticipantX
{
get { return m_ParticipantX; }
}
}
using Crestron.ActiveCNX;
public partial class Form1 : Form
{
ActiveCNX cnx;
cnx = new ActiveCNX();
Parsedata data = new Parsedata();
private void SerialSend_Click(object sender, EventArgs e)
{
data.ParseDataMethod();
int number = 8;
for (int i = 1; i < number; i++)
cnx.SendSerial(i, data.ParticipantX[i, 1]); //
}
}
答案 2 :(得分:1)
ParticipantX
数组在方法中声明,这意味着它将是该方法的本地数据。
您必须将声明置于方法之外:
public class Parsedata
{
public string[,] ParticipantX;
public void ParsedataMethod()
{
...
ParticipantX = new string[40, 4];
我已将ParticipantX
标记为public
,以便您可以从表单中访问它:
ParseData parseData = new ParseData();
parseData.ParticipantX[x, y] ...
更好的方法是使其成为公共财产:
private string[,] _participantX;
public string [,] ParticipantX
{
get { return _participantX; }
}
答案 3 :(得分:1)
首先,请记住,属性是类的一部分,而类具有属性(或字段)。没有集体所有者,您无法获得房产。
在静态中,你可以这样实现:
public static class Parsedata{
public static string[,] StringX{get;set;}
}
但是,当您的类和属性不是静态的时,您需要首先将类实例化为对象。例如:
public class Parsedata{
public string[,] StringX{get;set;}
}
public class Caller{
Parsedata p = new Parsedata();
public void SetStringX(string[,] stringX){
p.StringX = stringX;
}
public string[,] GetStringX(){
return p.StringX;
}
}
但是,您必须记住,实例化的实例化对象的值是不同的。示例(仅举例说明):
WebSite a = new WebSite();
a.Name = "Stack";
WebSite b = new WebSite();
b.Name = "Overflow";
Console.WriteLine(a.Name); // will result Stack
Console.WriteLine(b.Name); // will result Overflow
答案 4 :(得分:-1)
您可以制作Parsedata和ParsedataMethod静态方法,也可以在表单中创建Parsedata实例:
var pd = new ParseData();
然后你可以使用:
pd.Participant(...);