как вызвать переменную из файла form.cs в файл program.cs - PullRequest
0 голосов
/ 05 февраля 2011

У меня проблемы с доступом к двум моим переменным.Я посмотрел в Интернете и обнаружил, что мне нужно использовать что-то вроде 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 ]

5 голосов
/ 05 февраля 2011

Поля не должны подвергаться непосредственному воздействию; вместо этого добавьте свойство в форму:

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;
        }
    }
}
1 голос
/ 05 февраля 2011
var di = new DirectoryInfo(Form1.dlg.SelectedPath);      
di.CopyTo(Form1.dlg2.SelectedPath, true); 

Проблема с приведенным выше кодом заключается в том, что вы пытаетесь получить доступ к переменным-членам экземпляра формы, как если бы это был член класса.

Вы пишете Form1.dlg.SelectedPath, но Form1 - это имя вашего класса и, вероятно, не экземпляра.

Другая ошибка, с которой вы, вероятно, сталкиваетесь, заключается в том, что компилятор говорит, что элемент недоступен из-за его уровня защиты. Это потому, что ваши участники не объявлены публичными (переменная dlg). Это правильно, но вместо того, чтобы обнародовать его, предоставьте свойство для доступа к членам класса. Эта проблема возникает, если вы пытаетесь получить доступ к члену из другого класса (я думаю, вы пытаетесь это сделать).

public FolderBrowserDialog Dlg{
   get{return dlg;}
}

Лучше, однако, для этого есть решение, подобное опубликованному Марком Грэйвеллом, не предоставляющее диалоговое окно, а выбранное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...