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

时间:2011-02-05 16:37:15

标签: c# .net variables instance-variables

我无法访问我的两个变量。我在网上看了一下,发现我需要用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);  
            }  
        }  

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

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

public string FolderPath {
    get { return dlg.SelectedPath; }
}

然后从表单实例访问:

string path = myFormInstance.FolderPath;

另外 - 确保dlg与表格一起处理;在pact 个人中我根本不把它作为一个字段 - 我有一个强大的字段,我在一个小块中分配,创建,使用和处理对话框:

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

答案 1 :(得分:1)

var di = new DirectoryInfo(Form1.dlg.SelectedPath);      
di.CopyTo(Form1.dlg2.SelectedPath, true); 

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

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

您可能遇到的另一个错误是编译器表示该成员由于其保护级别而无法访问。这是因为您的成员未被公开(dlg - 变量)。这是正确的,但不是公开,而是提供访问类成员的属性。如果您尝试从另一个类访问该成员,则会出现此问题(我尝试执行此操作)。

public FolderBrowserDialog Dlg{
   get{return dlg;}
}

然而,更好的是,像Marc Gravell这样的解决方案发布了,没有提供对话框,而是提供了选定的值。