C# 如何从form.cs文件调用变量到program.cs文件

C# 如何从form.cs文件调用变量到program.cs文件,c#,.net,variables,instance-variables,C#,.net,Variables,Instance Variables,我在访问两个变量时遇到问题。我在互联网上搜索过,发现我需要使用类似form.dlg.selectedpath的东西来调用它,但我发现了三个错误。一个说form.dlg不可访问,另一个说需要对象引用。我还尝试访问另一个,这表示表单不包含dlg2的定义 这是我想要的变量代码 var di = new DirectoryInfo(Form1.dlg.SelectedPath); di.CopyTo(Form1.dlg2.SelectedPath, true); 这是我的代码

我在访问两个变量时遇到问题。我在互联网上搜索过,发现我需要使用类似
form.dlg.selectedpath的东西来调用它,但我发现了三个错误。一个说form.dlg不可访问,另一个说需要对象引用。我还尝试访问另一个,这表示表单不包含dlg2的定义

这是我想要的变量代码

var di = new DirectoryInfo(Form1.dlg.SelectedPath);  
           di.CopyTo(Form1.dlg2.SelectedPath, true);
这是我的代码,我从中获取一个变量

 public partial class Form1 : Form    
    {  
        FolderBrowserDialog dlg = new FolderBrowserDialog();


        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

            if (dlg.ShowDialog() == DialogResult.OK)
第二个变量从这里引用

private void button1_Click(object sender, EventArgs e)  
        {  
            FolderBrowserDialog dlg2 = new FolderBrowserDialog();  
            if (dlg2.ShowDialog() == DialogResult.OK)  
            //do whatever with dlg.SelectedPath  
            {  
                backgroundWorker1.RunWorkerAsync(dlg2.SelectedPath);  
            }  
        }  

任何帮助都将不胜感激。

字段不应直接公开;而是在窗体上添加一个属性:

public string FolderPath {
    get { return dlg.SelectedPath; }
}
然后从表单实例访问:

string path = myFormInstance.FolderPath;
另外-确保
dlg
与表单一起处理;就我个人而言,我根本不会把它作为一个字段——我会在一个小块中指定一个强字段,用于创建、使用和处理对话框:

public string FolderPath { get; private set; }

private void SelectPath() {
    using(var dlg = new FolderBrowserDialog()) { // or whatever type
        if(dlg.ShowDialog() == DialogResult.OK) {
            FolderPath = dlg.SelectedPath;
        }
    }
}

字段不应该直接暴露;而是在窗体上添加一个属性:

public string FolderPath {
    get { return dlg.SelectedPath; }
}
然后从表单实例访问:

string path = myFormInstance.FolderPath;
另外-确保
dlg
与表单一起处理;就我个人而言,我根本不会把它作为一个字段——我会在一个小块中指定一个强字段,用于创建、使用和处理对话框:

public string FolderPath { get; private set; }

private void SelectPath() {
    using(var dlg = new FolderBrowserDialog()) { // or whatever type
        if(dlg.ShowDialog() == DialogResult.OK) {
            FolderPath = dlg.SelectedPath;
        }
    }
}
上述代码的问题在于,您试图访问表单实例的成员变量,就像它是类成员一样

您可以编写
Form1.dlg.SelectedPath
,但Form1是类的名称,可能不是实例的名称

您可能遇到的另一个错误是,编译器说由于其保护级别,该成员无法访问。这是因为您的成员未声明为public(dlg
-变量)。这是正确的,但不是将其公开,而是提供用于访问类成员的属性。如果您试图从另一个类访问成员(我认为您试图这样做),就会出现此问题

不过,更好的解决方案是Marc Gravell posted,它不提供对话框,而是提供其选定值

上述代码的问题在于,您试图访问表单实例的成员变量,就像它是类成员一样

您可以编写
Form1.dlg.SelectedPath
,但Form1是类的名称,可能不是实例的名称

您可能遇到的另一个错误是,编译器说由于其保护级别,该成员无法访问。这是因为您的成员未声明为public(dlg-变量)。这是正确的,但不是将其公开,而是提供用于访问类成员的属性。如果您试图从另一个类访问成员(我认为您试图这样做),就会出现此问题

不过,更好的解决方案是使用Marc Gravell posted这样的解决方案,它不提供对话框,而是提供其所选值。

可能重复的