C# 在类之间访问列表\数组
我用C语言创建了一个简单的表单,其中只有几个按钮和文本框。用户将输入各种详细信息,如项目描述和代码、输出文件位置等 最终用户将启用浏览按钮,以允许他/她选择报告所在的输入目录 浏览按钮使用FolderBrowser对话框并检查结果。如果结果正常,那么我已经使用locationArray=Directory.GetFilesfbd.SelectedPath,*.txt创建了一个包含所有文件路径的数组 该类被定义为public void 我的计划是在finish按钮中添加一些脚本,然后这些脚本将遍历数组,提取文件名,读取每个文件的内容,并生成包含各种细节的报告 我遇到的问题是,我似乎无法在另一个classfinish按钮中访问数组 我在class-string[]locationArray之前定义了数组 然后使用类I使用文件路径填充数组,如下所示: locationArray=Directory.GetFilesfbd.SelectedPath,*.txt 在这个阶段,我知道数组正在填充,因为我已经显示了数组的长度 有人可以建议我如何访问不同类下的数组,以便我可以循环通过它 提前谢谢 更具体地说,我的代码如下所示:C# 在类之间访问列表\数组,c#,arrays,C#,Arrays,我用C语言创建了一个简单的表单,其中只有几个按钮和文本框。用户将输入各种详细信息,如项目描述和代码、输出文件位置等 最终用户将启用浏览按钮,以允许他/她选择报告所在的输入目录 浏览按钮使用FolderBrowser对话框并检查结果。如果结果正常,那么我已经使用locationArray=Directory.GetFilesfbd.SelectedPath,*.txt创建了一个包含所有文件路径的数组 该类被定义为public void 我的计划是在finish按钮中添加一些脚本,然后这些脚本将遍历
string[] locationArray;
public void button1_Click_1(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "Browse Directory";
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
locationArray = Directory.GetFiles(fbd.SelectedPath, "*.txt");
}
FinishButton.Enabled = true;
}
尝试在此处访问locationArray:
private void button1_Click(object sender, EventArgs e)
{
string sProjectName = ProjectName.Text;
string sProjectNumber = ProjectNumber.Text;
string sOutputDirectory = OutputDirectory.Text;
const string message1 = "Done!";
const string caption1 = "Completed";
var result = MessageBox.Show(message1, caption1,
MessageBoxButtons.OK,
MessageBoxIcon.Information);
if (result == DialogResult.OK)
Environment.Exit(0);
}
希望这能让事情更清楚
汤姆我想你对这些条款有点困惑。粘贴的实际上是方法,而不是类。如果要在它们之间共享变量,最好的方法是创建一个属性。所以我假设你真正的班级有两个事件。。。我想补充一下
public class Form1: Form { // this should be already in your code... either form or webform
public string[] LocationArray {get; set};
public void button1_Click_1(object sender, EventArgs e)
{
this.LocationArray = ['a', 'b']; // or whatever variable
}
private void button1_Click(object sender, EventArgs e)
{
var array = this.LocationArray; // you do not need to create an extra variable, this is only a way to reference it
}
}
作为免费的附加建议:确保在向对象添加代码之前重命名对象,这样就不会出现奇怪的命名约定按钮1\u Click,但您可以使用更具意义的btnSave\u Click。从这个类之外访问相同的属性也很容易。如果是这种情况,只需ping我,我也可以用它更新答案。问题似乎是您单击了第一个按钮1,而此时您还没有初始化locationArray。要避免此错误,请按以下方式初始化locationArray:
public ReportFormDesign()
{
InitializeComponent();
this.locationArray = new string[0];
}
还要记住,Environment.Exit有时会抛出Win32Exception。
改用Application.Exit
如果每次单击按钮1时退出应用程序,则可以替换两行,而不是初始化locationArray
string test = Convert.ToString(locationArray.Length);
MessageBox.Show(test);
与
但这取决于您的意图。请不要发布代码说明。只需发布相关的代码。这里有很多关于表单之间传递数据的答案。在不局限于列表或数组的情况下再进行一些搜索,看看是否找到了一个好的答案。命名空间Generic_reconction_Report{public partial class ReportFormDesign:Form{public ReportFormDesign{InitializeComponent;}我指的是InitializeComponent的内容。你可以在Designer.cs部分类中找到它,当你点击表单箭头时可以访问它:@DStanley-谢谢你的评论。不太确定是否有其他方法。我需要存储文件名和路径,以便以后可以根据单个文件名进行一些检查。谢谢所有的评论。我将尝试所有建议并报告。很棒的东西。它成功了,现在我可以访问数组的内容。Visual studio已抱怨“此”并要求删除哪个有效。再次感谢。我很高兴我能提供帮助。这对VS来说是多余的,但一些工具(如Resharper)建议使用它来确定变量是来自类还是我感谢David。我意识到在添加代码之后。一旦启动并运行,我将克隆解决方案并使用正确的命名约定。
MessageBox.Show(0);