在类之间访问列表数组

本文关键字:列表 数组 访问 之间 | 更新日期: 2023-09-27 18:18:01

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

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

浏览按钮使用FolderBrowserDialog并检查结果。如果结果是OK的,那么我已经创建了一个数组与路径到所有的文件使用locationArray = Directory.GetFiles(fbd。SelectedPath、"* . txt");

类定义为public void。

我的计划是在finish按钮中添加一些脚本,然后该按钮将遍历数组,提取文件名,读取每个文件的内容并生成具有各种详细信息的报告。

我遇到的问题是,我似乎无法访问数组在另一个类(完成按钮)。

我已经在类之前定义了数组- string[] locationArray;

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

locationArray = Directory.GetFiles(fbd。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
    }
}

作为免费的额外建议:确保在向对象添加代码之前重命名它们,这样您就不会得到奇怪的命名约定button1_Click,但您可以使用更有意义的btnSave_Click。从这个类外部访问相同的属性也很容易。如果是这种情况,只需ping我,我也可以更新答案。

问题似乎是您首先单击button1,当时您还没有初始化locationArray。为了避免这个错误,初始化locationArray如下:

    public ReportFormDesign()
    {
        InitializeComponent();
        this.locationArray = new string[0];
    }

还要记住Environment.Exit()有时会抛出Win32Exception。使用Application.Exit()代替如果每次单击button1都退出应用程序,则可以替换这两行

而不是初始化locationArray
string test = Convert.ToString(locationArray.Length);
MessageBox.Show(test);

MessageBox.Show(0);

但这取决于你的意图。