csv 如何在更多表单中使用label1?

ymdaylpp  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(147)
private void rectangleButton3_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog ofd = new OpenFileDialog())
        {
            ofd.Filter = "Excel Files only | *.xlsx; *.xls; *.csv;";
            ofd.Title = "Choose the file";
            if (ofd.ShowDialog() == DialogResult.OK)
                label1.Text = ofd.FileName;
        }
    }

嗨,我试图使用label 1作为我的路径导出.csv文件到我的项目:https://ibb.co/wNbnqbg
然后在我的第二个表单中,我尝试导入:https://ibb.co/mRG0q5S,但问题是这段代码:https://ibb.co/Gv3fSPv不知道标签1是。
我试图创建主页,用户选择与哪个.csv文件将工作。rectangleButton3_click后,您将该路径保存到label 1,然后在第二种形式,我想使用此路径/label 1导入数据到datagridview。

3duebb1j

3duebb1j1#

你不能在其他表单中使用label1,因为它是表单的私有字段,所以你不能通过该字段共享值。另外,Label是一个可视组件,不用于数据存储。
要在两个窗体之间共享值,可以在第二个窗体中创建一个属性,该属性从第一个窗体中获取值。可以在选择Excel文件后在第一个窗体中设置该属性。

public class SecondForm : Form
{
    private string _filePath;
    public string FilePath
    {
        get { return _filePath; }
        set { _filePath = value; }
    }
    ...
}

当你创建一个新的表单时,你可以从label1或其他地方设置值。例如,如果你在选择文件后立即打开第二个表单,你可以使用下面的代码:

private void rectangleButton3_Click(object sender, EventArgs e)
{
    using (OpenFileDialog ofd = new OpenFileDialog())
    {
        ofd.Filter = "Excel Files only | *.xlsx; *.xls; *.csv;";
        ofd.Title = "Choose the file";
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            SecondForm secondForm = new SecondForm();
            secondForm.FilePath = ofd.FileName;
            secondForm.Show();
        }
    }
}

最后,您可以读取第二种形式的FilePath,因为它是您的形式的一部分,并且值已经从第一种形式写入。
如果需要访问多个表单之间的值,有两种方法可以解决。
“好的”和架构上正确的解决方案是将这个值从一个窗体传递到另一个窗体,并在每个窗体中拥有一个文件路径属性。这是一个正确的方法,因为您将继续拥有一个松散耦合的架构,并能够轻松地修改代码。例如,中间窗体可能开始以不同的方式获取文件路径,或者窗体本身的组成可能会发生变化。
“坏”和hacky解决方案是一个全局状态,具有static属性,您可以在任何位置读取和写入:

public static class ApplicationState
{
    private static string _filePath;
    public static string FilePath
    {
        get { return _filePath; }
        set { _filePath = value; }
    }
}

所以你可以在代码的任何地方写ApplicationState.FilePath = ofd.FileNamevar filePath = ApplicationState.FilePath;,但问题是这违反了封装原则,使得在开发项目时很难测试和修改代码,因为你在整个应用程序中只有一个值。

vjhs03f7

vjhs03f72#

您可能希望从其他窗体或类访问它。
1.首先,您必须声明标签为public或其他文件可见的任何内容;
1.调用它的类必须知道Form 1单元,可能需要将它添加到uses子句中,但我不确定;
1.然后使用完整的名称来调用它,例如Form1.label1.Text

相关问题