2015-04-17 9 views
0

У меня есть контейнер MDI с двумя дочерними формами. Мы учили (и в документации MSDN только пример) использовать ключевое слово «this», которое предполагает, что дочерний объект, о котором идет речь, создается из самого контейнера MDI.C# Winforms, назначая родительский объект новому дочернему объекту, кроме формы-экземпляра

Если бы я создания объекта в контейнере MDI, это было бы правильно:

Form_Child2 child = new Form_Child2(textBox1.Text); 
child.MdiParent = this; 
child.Show(); 

Вместо этого я пытаюсь сделать что-то подобное:

Form_Child2 child = new Form_Child2(textBox1.Text); 
child.MdiParent = Form_Parent; 
child.Show(); 

Однако, это кидает ошибка, указывающая, что «Form_Parent» является типом и не может использоваться как переменная. Я думаю, что я смутно понимаю, что это такое, но это не ясно. Я тоже пытался изучить ключевое слово «это», но все же застрял.

+0

Где вы создать новую дочернюю форму? – Fabio

+0

Fabio, я пытался создать новый дочерний элемент в частичном классе (который я еще не совсем уверен, что еще имеет) скрипт моей первой дочерней формы, в контексте обработчика события для нажатия кнопки. Надеюсь, это ответит на ваш вопрос. –

ответ

4

Понимание разницы между типами и объектами супер-пупер важно, если вы хотите быть в C# программист. Да, здесь большая проблема, здесь нужен экземпляр Form_Parent, вы не можете использовать имя типа.

Только один экземпляр родительского окна MDI. Это то, что вы можете использовать, вы можете добавить статическое свойство в родительский класс. Убедитесь, что выглядеть следующим образом:

public partial class Form_Parent : Form { 

    public static Form_Parent Instance { get; private set; } 

    public Form_Parent() { 
     InitializeComponent(); 
     Instance = this; 
    } 
    // etc.. 
} 

Теперь это очень просто:

Form_Child2 child = new Form_Child2(textBox1.Text); 
child.MdiParent = Form_Parent.Instance; 
child.Show() 
+0

Большое вам спасибо. Да, этот процесс создания экземпляров был тем, что я не знал, как это сделать. Это интересно. Я уверен, что мне нужно больше изучить доступность и характер объектов и экземпляров. Я вижу, что вы создали экземпляр Form_Parent как свойство, автоматически реализованное, и, пока нас учили основам этого, я еще не понял его полностью. Итак, другими словами, я вижу, что это работает, я смутно вижу, КАК это работает, но я не понимаю ... почему это работает. Но пока это отлично, и мне очень помогло - еще раз спасибо. –

0

Это потому, что вы пытаетесь установить Type как Родитель

Вам нужно создать экземпляр типа перед установкой его в качестве Parent:

Form_Parent parent = new Form_Parent(); 
Form_Child2 child = new Form_Child2(textBox1.Text); 
child.MdiParent = parent; 
child.Show(); 

Конечно, если ваш родитель уже создана , вам нужно установить родительский экземпляр для этого экземпляра, а не создать новый.

Если вы не знали, что означает Instance, объект и класс, я бы Recommand вы читать о Object Oriented Programmation

+0

Спасибо за вашу помощь, да, я пытался назначить нового ребенка исходной, существующей, родительской форме. –