C# 在类之间访问列表\数组

C# 在类之间访问列表\数组,c#,arrays,C#,Arrays,我用C语言创建了一个简单的表单,其中只有几个按钮和文本框。用户将输入各种详细信息,如项目描述和代码、输出文件位置等 最终用户将启用浏览按钮,以允许他/她选择报告所在的输入目录 浏览按钮使用FolderBrowser对话框并检查结果。如果结果正常,那么我已经使用locationArray=Directory.GetFilesfbd.SelectedPath,*.txt创建了一个包含所有文件路径的数组 该类被定义为public void 我的计划是在finish按钮中添加一些脚本,然后这些脚本将遍历

我用C语言创建了一个简单的表单,其中只有几个按钮和文本框。用户将输入各种详细信息,如项目描述和代码、输出文件位置等

最终用户将启用浏览按钮,以允许他/她选择报告所在的输入目录

浏览按钮使用FolderBrowser对话框并检查结果。如果结果正常,那么我已经使用locationArray=Directory.GetFilesfbd.SelectedPath,*.txt创建了一个包含所有文件路径的数组

该类被定义为public void

我的计划是在finish按钮中添加一些脚本,然后这些脚本将遍历数组,提取文件名,读取每个文件的内容,并生成包含各种细节的报告

我遇到的问题是,我似乎无法在另一个classfinish按钮中访问数组

我在class-string[]locationArray之前定义了数组

然后使用类I使用文件路径填充数组,如下所示:

locationArray=Directory.GetFilesfbd.SelectedPath,*.txt

在这个阶段,我知道数组正在填充,因为我已经显示了数组的长度

有人可以建议我如何访问不同类下的数组,以便我可以循环通过它

提前谢谢

更具体地说,我的代码如下所示:

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