C # наследование корневой формы, изменения приводят к нарушению дочерних форм - PullRequest
2 голосов
/ 26 февраля 2010

Привет, я установил несколько подчиненных форм, которые все наследуются от корневой формы, которая настраивает несколько кнопок, логотипов и т. Д., Чтобы затем отфильтровать их до потомков. Я использовал мастер Visual Studio, чтобы добавить подчиненные формы, наследуемые от корня, и они автоматически объявляются с помощью:

    public partial class WelcomeForm : MynetInstaller.rootForm

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

У меня есть две проблемы: 1 / Я изменяю размер, это никак не влияет на детей, кажется, что после начальной настройки размер не наследуется.

2 / Я меняю расположение кнопки, это приводит к разрыву всех подчиненных форм, показывая ошибку, которая:

To prevent possible data loss before loading the designer, the following errors must be     resolved:   



'child' is not a child control of this parent.     

Instances of this error (1)  

1.   Hide Call Stack 

at System.Windows.Forms.Control.ControlCollection.GetChildIndex(Control child, Boolean     throwException)
at System.Windows.Forms.Control.ControlCollection.SetChildIndexInternal(Control child, Int32 newIndex)
at System.Windows.Forms.Control.ControlCollection.SetChildIndex(Control child, Int32 newIndex)
at   System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.SetChildIndex(Control child, Int32 newIndex)  

Если я нажму «Продолжить», она загрузит страницу, но не переместит кнопку, и если я попытаюсь запустить ее, я получу сообщение об ошибке:

this.Controls.SetChildIndex(this.btnNext, 0);

Высказывание:

'child' is not a child control

Я заметил, что когда я перемещаю элемент управления, он перестает блокироваться, но изменение этого вручную не помогает.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Размер базовой формы наследуется , конструктор обычно не позволяет снова установить размер в производной форме. Но возможны неудачи, возможно, одна форма была слегка изменена. Или, возможно, он был разработан на машине с настройкой DPI видео, отличной от машины, на которой была разработана базовая форма.

Для этого есть только обходной путь, отредактированный сгенерированным дизайнером кодом. В окне обозревателя решений откройте узел рядом с подформой и дважды щелкните файл Designer.cs. Разверните область с надписью «Код, сгенерированный конструктором форм Windows» и найдите назначение для свойства ClientSize. Удалить его.

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

0 голосов
/ 18 июня 2015

Если проблема «ребенок» не является дочерним элементом управления, необходимо удалить из файла .designer.cs командные строки .setChildIndex.

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