在表单1中,我打开了一个xml文件。现在我希望能够在Form2中使用字符串文件名,这样我就可以执行额外的功能和/或使用文件中的内容。
Form1
DialogResult result;
string filename;
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileChooser = new OpenFileDialog())
{
fileChooser.Filter = "Xml Files (*.xml)|*.xml";
fileChooser.CheckFileExists = false;
result = fileChooser.ShowDialog();
filename = fileChooser.FileName;
}
}
Form2
namespace PreviewForm
{
public partial class Preview : Form
{
int ind1 = 1;
public Preview()
{
InitializeComponent();
}
private void Preview_Load(object sender, EventArgs e)
{
//I want to able to do something like this
//XmlDocument xDoc = new XmlDocument();
//xDoc.Load(filename);
//foreach(XmlNode xNode in xdoc.SelectNode(People/People))
//{
// Label lable1 = new Label();
// label1.Text = xNode.SelectingSingleNode("Name").InnerText;
// label1.Name = "label_" + ind1;
// label1.Location = new Point(code);
// ind1++;
// this.Controls.Add(label1);
}
}
}
所以我希望能够将form1中的字符串filename用于form2。
答案 0 :(得分:0)
只需使用私有字段实例并将其添加到构造函数
namespace PreviewForm
{
private string _filename = string.Empty;
public partial class Preview : Form
{
int ind1 = 1;
public Preview(string filename)
{
InitializeComponent();
_filename = filename;
}
在Form2中使用字符串文件名
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileChooser = new OpenFileDialog())
{
fileChooser.Filter = "Xml Files (*.xml)|*.xml";
fileChooser.CheckFileExists = false;
result = fileChooser.ShowDialog();
filename = fileChooser.FileName;
//for example here
PreviewForm form2=new PreviewForm(filepath);
form2.ShowDialog(this);
}
}
答案 1 :(得分:0)
解决方案1:您可以使用FilePath
将Form1
从Form2
发送到constructor
,如下所示:
Form2 form2=new Fomr2(filepath);
form2.ShowDialog();
并在Form2中创建一个字符串参数构造函数,如下所示:
string filepath;
public Preview(string filepath)
{
InitializeComponent();
this.filepath=filepath;
}
解决方案2:在public
中将文件路径变量设为static
Form1
,以便可以使用其类名访问它。
试试这个:
public static string filepath;
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileChooser = new OpenFileDialog())
{
fileChooser.Filter = "Xml Files (*.xml)|*.xml";
fileChooser.CheckFileExists = false;
result = fileChooser.ShowDialog();
filename = fileChooser.FileName;
Form2 form2=new Fomr2(filepath);
form2.ShowDialog();
}
}
从Form2:
您可以从以下网址访问:
String filepath = Form1.filepath;
答案 2 :(得分:0)
有些人已经发布了工作示例,但我想概述一下当您需要将数据从类传递到另一个类时可以执行的操作。
我向您介绍了将数据从第一个类(发送者类)传递到第二个类(接收者类)的3种基本方法:
构造函数注入。这是大多数人在这里描述的内容,它基本上意味着在接收器类上有一个“特殊”构造函数,它将从sender类调用,以在实例化接收器类对象时将必要的数据作为参数传递。然后可以将数据保存到接收器类的本地成员。
Setter Injection。在这种情况下,您可以在从发送方类调用的接收方类上定义公共属性,但是在实例化接收方之后。与构造函数注入一样,您可以将数据保存到接收器上的本地成员。
方法注入。在这种情况下,您可以在接收器类上定义一个方法,该方法将定义一个参数来接收数据。在这里,您可以决定将数据存储到接收器的成员,但您也可以决定直接在方法体中使用数据,并在完成后将其丢弃。
这绝不是一个详尽的列表,列出了如何在类之间传递数据,但它将为您提供一个良好的起点。
干杯