2013-11-11 3 views
0

Теперь, прежде чем кто-либо отправится и отметит этот вопрос как дубликат, я хотел бы сказать, что моя проблема отличается от других. Я пытаюсь открыть существующую форму из другого, но у меня возникают проблемы в том смысле, что я установил некоторые формы для «размещения» других (для переноса переменных между ними). Вот что я имею в виду:Открытие новой формы Windows из другой формы

public partial class Schedule_Tasks : Form 
{ 

    readonly Schedules schedules; 

    public Schedule_Tasks(Schedules host) 
    { 
     this.schedules = host; 
     InitializeComponent(); 
    } 

Так что в этом фрагменте кода, я пытаюсь получить значение некоторых переменных из формы расписаний, в форме Schedule_Tasks. Поэтому я использовал систему «хост». SO далеко этот метод работает отлично, но моя проблема возникает, когда я пытаюсь открыть конкретную форму, от другой, которая не является «хостингом». Например, используя:

new Schedules().Show(); 

Так, очевидно, когда я объявляю это, я бы сказал что-то вроде «это» в скобках после расписания, но это не будет работать, если форма вызывается из вне Форма «хозяин». Я просто хотел бы сейчас, есть ли что-то, чего я не вижу или могу изменить? Пожалуйста, дайте мне знать, если какая-либо часть не ясна, это немного сложно объяснить. Любая помощь приветствуется, Cheers.

EDIT

Вот код, который я работаю в настоящее время:

public partial class Schedual_Tasks : Form 
{ 



    readonly Scheduals scheduals; 
    public string selectedDevice; 
    public string getPath; 
    public string totalPath; 


    public Schedual_Tasks(Scheduals host) 
    { 
     this.scheduals = host; 
     InitializeComponent(); 
     selectedDevice = scheduals.itemSelected; 
    } 

    private void Schedual_Tasks_Load(object sender, EventArgs e) 
    { 

    } 

    private void changeDirectory_Click(object sender, EventArgs e) 
    { 
     new Folder_Browser(this).Show(); //Error Occurs here 
    } 
} 

А вот конструктор Folder_Browser, который является формой я пытаюсь позвонить:

readonly Back_up_Options backOptions; 
    public string deviceSel; 

    public Folder_Browser(Back_up_Options host) 
    { 
     InitializeComponent(); 
     this.backOptions = host; 
     deviceSel = backOptions.deviceSel; 

    } 
+0

Я думаю, что вы не можете 'new Schedules(). Show();' вы могли бы вызвать метод объекта после создания экземпляра say 'myForm = new Schedules();' myForm.Show(); 'Но я не хочу еще не знаете, что вы имели в виду под формой '', от другой, которая не является хостингом ''? Лучше всего разместить большинство, если не ВСЕ, кода, чтобы мы могли видеть всю картину. – Edper

+0

Расписания также являются «Формой», правильно? Когда вы говорите о проблеме, которая возникает, в чем проблема? Ошибка компиляции или время выполнения? –

+0

'schedules.Show()' не работает? –

ответ

0

Ваш конструктор формы (Folder_Browser) объявлен как

public Folder_Browser(Back_up_Options host) 

Это означает, что вы не можете передать Schedual_Tasks экземпляр в качестве параметра host, потому что нет никакого способа, чтобы преобразовать из Schedual_Tasks объекта в Back_up_Options объекта. Компилятор обнаруживает это и создает сообщение об ошибке.

Если вы не можете передать параметр host, вы можете передать null вместо:

new Folder_Browser(null).Show(); 

Но тогда вы должны убедиться, что вы чекbackOptions элемент для нулевой ссылки каждый раз, когда вы используете его , Например:

if(backOptions != null) 
{ 
    deviceSel = backOptions.deviceSel; 
} 
else 
{ 
    deviceSel = null; 
} 

Это в свою очередь означает, что вам нужно будет проверить deviceSel на нуль каждый раз, когда вы используете его, и так далее.

И, конечно, использование вашей формы без «хоста» должно быть возможным вообще. Если у вас есть код, который требует «хост», он не сработает.

Смежные вопросы