使用c#,变量传递不起作用

时间:2018-05-25 22:41:54

标签: c#

我是业余爱好者。我想将变量传递给下一个私有类Exec。但该值为null。此来源存在问题。请教我。

  1. 我希望以类的形式获取所有文件夹路径。
  2. 然后,我想循环播放" xml文件"通过以下处理在文件夹中。
  3. 这是我的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);
        } 
    } 
    

1 个答案:

答案 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的构造函数 - 您可以自由选择在您的情况下最有效的方法。但上面的答案应该让你去。