2013-11-07 3 views
0

Я делаю приложение Windows Form с именем FMP. У меня есть класс под названием Form1, класс под названием Panels. Затем я использую наследование для создания разных панелей с различными свойствами.Настройка свойств панельных объектов

Причина этого в том, что учитель не хочет, чтобы мы инициализировали все панели в классе Form.

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

Размер, расположение и цвет для всех панелей одинаковы. (Нажав на кнопку, появится другая панель;)) Но имя, элементы управления на панели и BackgroundImages отличаются. Элементы управления являются наиболее важным аспектом здесь.

Возникает вопрос:

Ширина и высота должна быть равна Widht и высота от формы. Что лучше всего в программировании C#? Чтобы установить ширину и высоту из панелей в Form1 (но я сделал их защищенными) или объявить форму в классе «Панели» и использовать Form1.Width?

код у меня правильно понять:

Form1

public Form1() 
    { 
     InitializeComponent(); 
     buttonsProperties(); 
     panelsProperties(); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     panelsChanged(1); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     panelsChanged(2); 
    } 
    private void panelsChanged(int panelNr) 
    { 
     if (panelNr == 1) 
     { 
      panel1.Visible = true; 
      panel1.Enabled = true; 
      panel2.Visible = false; 
      panel2.Enabled = false; 
     } 
     else if (panelNr == 2) 
     { 
      panel1.Visible = false; 
      panel1.Enabled = false; 
      panel2.Visible = true; 
      panel2.Enabled = true; 
     } 
} 

Панели

class Panels 
{ 
    Form1 f = new Form1(); 
    //Color Property 
    protected Color color { get; set; } 
    //Size 
    protected Int32 Width { get; set; } 
    protected Int32 Height{ get; set; } 
    //Location 
    protected Point Location { get; set; } 
    public Panels() 
    { 
     initMembers(); 
    } 

    private void initMembers() 
    { 
     this.Width = f.Width; 
     this.Height = f.Height; 
     this.Location = new Point(0, 0); 
    } 
} 
public class Panel1 : Panels 
{ 
    //Nothing yet. 
} 
+0

Если панели должны заполнять всю область формы, вы можете попробовать «panel.Dock = DockStyle.Fill;'. –

+0

Благодарим вас за DockStyle.Fill. Но программа не рисует панель. Я думаю, что я не могу добавить его в Form1.Controls (this.Controls.Add (панели) // Ошибка) –

ответ

0

Используя имя Panels в качестве базового класса для каждой панели сбивает с толку:

  • Имя не должно быть в форме множественного числа, так как каждый экземпляр класса явно напоминает одну «панель» (а панель имеет ширину, несколько панели не имеет (один) ширину)
  • Поскольку вы тара приложения WinForms, имя выглядит слишком много, как System.Windows.Forms.Panel класса

Если бы я тебя, я бы позволил вашему базовому класса проистекает из System.Windows.Forms.Panel:

abstract class MyPanelBase : Panel 
{ 
    public MyPanelBase() 
    { 
     Dock = DockStyle.Fill; 
    } 
} 

class MyPanel1 : MyPanelBase 
{ 
} 

Таким образом вы автоматически получаете поведение (и свойства) Panel и можете добавить его в родительский элемент управления (в вашем случае - в форму).

Если все функции вы хотите, уже поддерживается Panel можно даже пропустить MyPanelBase бит и пусть MyPanel1 получить непосредственно от Panel.

+0

Спасибо, это должно помочь, я думаю :). Но мои панели имеют одинаковый размер. Одновременно они не видны. –

+0

@E.Verdi вы можете установить этот размер (или свойство 'Dock') в конструкторе' MyPanelBase', если вы идете на это решение. –

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