2016-08-24 3 views
0

Я создал две формы:Добавление элементов управления в наследуемой форме C#

  1. FormBase
  2. FormChild

FormBase содержит panelMain и которые будут добавлены к panelMain две кнопки (buttonOk и buttonCancel) ,

 private void InitializeComponent() 
    { 
     this.buttonCancel = new System.Windows.Forms.Button(); 
     this.buttonOk = new System.Windows.Forms.Button(); 
     this.panelMain = new System.Windows.Forms.Panel(); 
     this.panelMain.SuspendLayout(); 
     this.SuspendLayout(); 
     // 
     // buttonCancel 
     // 
     this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 
     this.buttonCancel.Location = new System.Drawing.Point(465, 208); 
     this.buttonCancel.Name = "buttonCancel"; 
     this.buttonCancel.Size = new System.Drawing.Size(107, 42); 
     this.buttonCancel.TabIndex = 0; 
     this.buttonCancel.Text = "Cancel"; 
     this.buttonCancel.UseVisualStyleBackColor = true; 
     // 
     // buttonOk 
     // 
     this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 
     this.buttonOk.Location = new System.Drawing.Point(352, 208); 
     this.buttonOk.Name = "buttonOk"; 
     this.buttonOk.Size = new System.Drawing.Size(107, 42); 
     this.buttonOk.TabIndex = 1; 
     this.buttonOk.Text = "Ok"; 
     this.buttonOk.UseVisualStyleBackColor = true; 
     // 
     // panelMain 
     // 
     this.panelMain.Controls.Add(this.buttonOk); 
     this.panelMain.Controls.Add(this.buttonCancel); 
     this.panelMain.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.panelMain.Location = new System.Drawing.Point(0, 0); 
     this.panelMain.Name = "panelMain"; 
     this.panelMain.Size = new System.Drawing.Size(584, 262); 
     this.panelMain.TabIndex = 2; 
     // 
     // FormBase 
     // 
     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
     this.ClientSize = new System.Drawing.Size(584, 262); 
     this.Controls.Add(this.panelMain); 
     this.Name = "FormBase"; 
     this.Text = "FormBase"; 
     this.panelMain.ResumeLayout(false); 
     this.ResumeLayout(false); 

    } 

    #endregion 

    internal System.Windows.Forms.Button buttonCancel; 
    internal System.Windows.Forms.Button buttonOk; 
    public System.Windows.Forms.Panel panelMain; 

Теперь я хочу наследовать FormBase для FormChild.

public partial class FormChild : FormBase 

Когда FormChild изменяется в FormChild.cs [Конструктор] две кнопки остаться в нижнем правом конце FormChild.

Моя проблема заключается в том, что при добавлении метки к panelMain в FormChild.cs [Design] и FormChild изменяется в настоящее время, две кнопки don't пребывание в нижнем правом конце FormChild, вместо они всегда остаются в местоположении по умолчанию, определенном в FormBase.

this.buttonCancel.Location = new System.Drawing.Point(465, 208); 
this.buttonOk.Location = new System.Drawing.Point(352, 208); 

Почему это происходит и как я могу исправить эту проблему?

Спасибо!

+0

Якоря не работают хорошо в сценарии наследования, элемент управления привязывается к исходному размеру клиента, а не к новому размеру. Насколько влияет SuspendLayout(), это не ясно для меня, но в любом случае вы ничего не можете с этим поделать. Я считаю, что единственное практическое решение - либо применить Anchor в производном классе, либо не изменять размер до тех пор, пока не произойдет событие Load. –

+0

Большое спасибо за ваш ответ! Тогда я попытаюсь найти другой путь. –

ответ

0

Как только вы добавите элемент управления (это не имеет значения, какой) или изменить форму в режиме конструктора, конструктор добавляет следующую строку к FormChild.Designer.cs:

this.panelMain.Size = new System.Drawing.Size(xxx, yyy); 

Просто удалить эта строка, и ваша форма должна работать так, как вы ожидаете.

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