C# 如何将变量从一个类发送到另一个类
这是现在的代码,我将包括程序的所有代码,因为我之前遗漏了一些位。由于您的帮助,我更改了位,我用星号和/// 第一个类是在直接编辑窗体时从Windows窗体创建的标准类C# 如何将变量从一个类发送到另一个类,c#,.net,forms,class,C#,.net,Forms,Class,这是现在的代码,我将包括程序的所有代码,因为我之前遗漏了一些位。由于您的帮助,我更改了位,我用星号和/// 第一个类是在直接编辑窗体时从Windows窗体创建的标准类 namespace DistanceEstimatorFinal { public partial class Form1 : Form { private bool saved; public Form1() { dataPoints m
namespace DistanceEstimatorFinal
{
public partial class Form1 : Form
{
private bool saved;
public Form1()
{
dataPoints mydataPoints = new dataPoints();
InitializeComponent();
dataPoint a = mydataPoints.getItem(0);
latTextBox.Text = a.CurLatitude;
longTextbox.Text = a.CurLongtitude;
eleTextBox.Text = a.CurElevation;
saved = true;
}
private void latTextBox_TextChanged(object sender, EventArgs e)
{
}
private void openDataListToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "CSV files (*.csv)|*.csv|Text files ( *.txt)|*.txt |All files (*.*)|*.*";
if (ofd.ShowDialog(this).Equals(DialogResult.OK))
{
*var dp = new dataPoints (ofd.FileName);* /////
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (saved)
{
if (MessageBox.Show("Save?", "Data Not Saved", MessageBoxButtons.YesNo).Equals(DialogResult.Yes))
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.ShowDialog();
}
}
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd1 = new SaveFileDialog();
sfd1.Filter = "CSV files (*.csv)|*.csv|Text files ( *.txt)|*.txt |All files (*.*)|*.*";
sfd1.ShowDialog();
}
}
}
这个类被设计为从文件中读取数据,我目前正在修改它,以便从open函数中读取文件
namespace DistanceEstimatorFinal
{
public class dataPoints
{
List<dataPoint> Points;
string p;
public dataPoints(string path)
{
p = path;
Points = new List<dataPoint>();
StreamReader tr = new StreamReader(p);
string input;
while ((input = tr.ReadLine()) != null)
{
string[] bits = input.Split(',');
dataPoint a = new dataPoint(bits[0],bits[1],bits[2]);
Points.Add(a);
}
tr.Close();
}
internal dataPoint getItem(int p)
{
if (p < Points.Count)
{
return Points[p];
}
else
return null;
}
}
}
您的
pathFile
是一个方法局部变量,因此除了该方法的主体之外,它在任何地方都不可访问(此处opendatalisttolstripmenuitem\u单击)
您可以向dataPoints
构造函数添加一个参数,以将该值传递给类:
public class dataPoints
{
List<dataPoint> Points;
public dataPoints(string path)
{
Points = new List<dataPoint>();
//here `path` from constructor arguments
TextReader tr = new StreamReader(path);
//...rest part of your code
}
但是请记住,pathFile
只能在openDataListToolStripMenuItem\u单击中访问。因此,您应该在此处创建数据点
,或者将路径文件
设置为表单的字段,以便可以通过该表单的任何方法访问它。然后您将有机会以这种形式的任何方法访问pathFile
根据,这应该是这样的:
private void openDataListToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "CSV files (*.csv)|*.csv|Text files ( *.txt)|*.txt |All files (*.*)|*.*";
if (ofd.ShowDialog(this).Equals(DialogResult.OK))
{
//actually you don't even need to have a separate `pathFile` variable
//just pass the value from the dialog straight to your `dataPoints` object
var dp = new dataPoints(ofd.FileName);
//...rest of your code
}
}
S:Outlook,但是,请考虑阅读< /P>是否尝试将它作为构造函数的一部分?是的,我有,但我不知道怎么做,如果我把pathFile;在顶部,它只是以红色下划线。您是否仅从Form1的代码创建数据点?如果是这样的话,你应该考虑康斯坦丁的答案。为什么要降低这个问题呢?谢谢你的帮助。我只是想理解一下。@user1744093欢迎您在这里提问,如果有不清楚的地方OK,我通过创建构造函数p将值从对话框传递到datapoints对象,但是,现在当我将构造函数p放入streamreader时,它返回一个错误,说“值不能为null”我已经编辑了它并包含了代码的其余部分。如果您愿意,欢迎您停止。我知道我的编码需要大量工作:S@user1744093您已经添加了另一个构造函数,而只需要向现有构造函数添加一个参数。仔细重读我的答案
var dp = new dataPoints(pathFile);
private void openDataListToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "CSV files (*.csv)|*.csv|Text files ( *.txt)|*.txt |All files (*.*)|*.*";
if (ofd.ShowDialog(this).Equals(DialogResult.OK))
{
//actually you don't even need to have a separate `pathFile` variable
//just pass the value from the dialog straight to your `dataPoints` object
var dp = new dataPoints(ofd.FileName);
//...rest of your code
}
}