我是业余爱好者。我想将变量传递给下一个私有类Exec。但该值为null。此来源存在问题。请教我。
这是我的class form
:
public partial class form : Form
{
public form()
{
InitializeComponent();
}
private string XmlFolderPath;
private string XsltFilePath;
public string XmlFolderPath1 => XmlFolderPath;
public string XsltFilePath1 => XsltFilePath;
//XMLフォルダ選択
private void ButtonXml_Click(object sender, EventArgs e)
{
FolderBrowserDialog dr = new FolderBrowserDialog
{
Description = "Xml ファイルが格納されたフォルダを選択してください"
};
DialogResult result = dr.ShowDialog();
if (result == DialogResult.OK)
{
XmlFolder.Text = dr.SelectedPath;
XmlFolderPath = XmlFolder.Text;
}
}
//XSLTファイル選択
private void ButtonXslt_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog
{
Title = "XSLT ファイルのみを選択してください",
Filter = "Xslt File (*.xslt)|*.xslt|All files (*.*)|*.*"
};
DialogResult result = file.ShowDialog();
if (result == DialogResult.OK)
{
XsltFile.Text = file.FileName;
XsltFilePath = XsltFile.Text;
}
}
//キャンセルボタン+ESC
private void Button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void FolderSelect_Load(object sender, EventArgs e)
{
}
private void RunHtml_Click(object sender, EventArgs e)
{
this.Enabled = true;
MessageBox.Show(XmlFolderPath);
Exec run = new Exec();
run.RunHTML();
}
}
private class Exec: form
{
public void RunHTML()
{
form form = new form();
MessageBox.Show(form.XmlFolderPath1);
MessageBox.Show(form.XsltFilePath1);
}
}
答案 0 :(得分:0)
问题在于Exec
班级中的这一行:
form form = new form();
在此行中,您会看到new
关键字。这意味着您正在创建一个新实例。但是您需要从已有的实例中获取XmlFolderpath。
一种可能的解决方案是传入实例。首先,修改您的Exec类:
public void RunHTML(form existingInstance)
{
MessageBox.Show(existingInstance.XmlFolderPath1);
MessageBox.Show(existingInstance.XsltFilePath1);
}
现在修改调用者以传递表单:
Exec run = new Exec();
run.RunHTML(this);
现在您将现有表单传递给RunHTML方法,该方法现在可以读取值。
还有其他方法可以做到这一点 - 例如,您可以将表单传递给Exec的构造函数 - 您可以自由选择在您的情况下最有效的方法。但上面的答案应该让你去。