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。
2条答案
按热度按时间3duebb1j1#
你不能在其他表单中使用
label1
,因为它是表单的私有字段,所以你不能通过该字段共享值。另外,Label
是一个可视组件,不用于数据存储。要在两个窗体之间共享值,可以在第二个窗体中创建一个属性,该属性从第一个窗体中获取值。可以在选择Excel文件后在第一个窗体中设置该属性。
当你创建一个新的表单时,你可以从
label1
或其他地方设置值。例如,如果你在选择文件后立即打开第二个表单,你可以使用下面的代码:最后,您可以读取第二种形式的
FilePath
,因为它是您的形式的一部分,并且值已经从第一种形式写入。如果需要访问多个表单之间的值,有两种方法可以解决。
“好的”和架构上正确的解决方案是将这个值从一个窗体传递到另一个窗体,并在每个窗体中拥有一个文件路径属性。这是一个正确的方法,因为您将继续拥有一个松散耦合的架构,并能够轻松地修改代码。例如,中间窗体可能开始以不同的方式获取文件路径,或者窗体本身的组成可能会发生变化。
“坏”和hacky解决方案是一个全局状态,具有
static
属性,您可以在任何位置读取和写入:所以你可以在代码的任何地方写
ApplicationState.FilePath = ofd.FileName
或var filePath = ApplicationState.FilePath;
,但问题是这违反了封装原则,使得在开发项目时很难测试和修改代码,因为你在整个应用程序中只有一个值。vjhs03f72#
您可能希望从其他窗体或类访问它。
1.首先,您必须声明标签为public或其他文件可见的任何内容;
1.调用它的类必须知道Form 1单元,可能需要将它添加到uses子句中,但我不确定;
1.然后使用完整的名称来调用它,例如
Form1.label1.Text
。