对于c#,变量传递不起作用

对于c#,变量传递不起作用,c#,C#,我是业余爱好者。我想把变量传递给下一个私有类Exec。但该值为空。此源存在问题。请教我 我想用类表单获取所有文件夹路径 然后,我想通过以下处理循环文件夹中的“xml文件” 这是我的课程表: public partial class form : Form { public form() { InitializeComponent(); } private string XmlFolderPath; private string XsltF

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

  • 我想用类表单获取所有文件夹路径
  • 然后,我想通过以下处理循环文件夹中的“xml文件”
  • 这是我的
    课程表

    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);
        } 
    } 
    

    问题在于
    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的构造函数中——您可以自由选择在您的情况下最适合的方法。但是上面的答案应该能让你继续。

    private class Exec:form{public void RunHTML(){form form=new form();MessageBox.Show(form.XmlFolderPath1);MessageBox.Show(form.XsltFilePath1);}}不要在注释中添加代码。而是编辑你的问题。除此之外:什么是空的?你能对你的问题说得更具体一点吗?非常感谢。我解决了。我很抱歉。请教我。如果我使用accession[public class Exec:form],我能以智能的方式编写代码吗?