2016-12-27 4 views
1

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

enter image description hereC# как добавить метки класса, чтобы сформировать Контролируйте


Если я хочу сделайте эти меню, я создаю свой класс меню и добавлю 7 меню в класс, задаю текст, задаю цвет, задаю позицию ...

Все в порядке, Но у меня проблема с элементами управления.
Когда я создал класс меню в Form1.cs, я не знаю, как добавить метки в элементы управления Form1.
Способ, которым я занимаюсь, - заставить класс получить контроль над формой и добавить метки в класс.
Итак, есть ли способы получить элементы родительского класса в его дочернем классе?

как

главный пример класса

namespace Tetris 
{ 
    public partial class Form_Start : Form 
    { 
     public Form_Start() 
     { 
      InitializeComponent(); 
      Menu menu = new Menu(10,postion_x,postion_y,str_arr); 
     } 
    } 
} 

класс меню Пример

class menu 
    { 
     Label[] lab; 
     List<string> str = new List<string>(); 
     int num, start_x, start_y, x_interval, y_interval; 
     public create_menu(int value, int start_x, int start_y, int x_interval, int y_interval, List<string> str) 
     { 
      num = value; 
      lab = new Label[num]; 
      start_x = this.start_x; 
      start_y = this.start_y; 
      x_interval = this.x_interval; 
      y_interval = this.y_interval; 
      str = this.str; 
      int count = 0; 
      foreach (Label label in lab) 
      { 
       label.Text = str[count]; 
       label.Location = new System.Drawing.Point(start_x + x_interval * count, start_y + y_interval * count); 
       count++; 
       Parent.Controls.Add(label); // <- I want to know this code 
      } 
     } 
} 

Если у вас есть какие-либо идеи лучше или знаете другие способы, пожалуйста, скажите мне. thank you



------------------------------------------ -------
Отправляя элементы управления классу, я добавил метки в форму.

create_menu menu = new create_menu(3, 20, 20, 0, 10, menu_str, this.Controls); 
public create_menu(int index, int start_x_, int start_y_, int x_interval_, int y_interval_, List<string> str_, Control.ControlCollection ctrl) 
{ ctrl.Add(label[i]); } 

Есть ли идеи лучше?

+0

Если я правильно вас понял - у вас есть элемент управления меню с несколькими ярлыками на нем, чтобы показать структуру меню. Когда вы добавляете экземпляр этого элемента управления в форму 'form1', все ярлыки, имеющиеся в вашем элементе управления меню, будут добавлены в вашу форму. Правильно ли я это интерпретировал? В этом случае ваш элемент управления меню будет являться родителем надписей меню, а form1 будет родителем элемента управления меню. Итак, какая именно проблема вы здесь столкнулись? – RBT

+0

@RBT да, но я хочу знать, как класс получает контроль над его родителем – AJH

ответ

0

Вам нужно немного подстроить свой класс. Просто унаследовать класс меню из System.Windows.Forms.Control класса, как показано ниже:

class menu : System.Windows.Forms.Control 
{ 
     //....your entire code for menu class 
} 

Теперь, когда вы добавляете свое меню в виде окон Form1 вы можете получить доступ к его родителей, используя this.Parent (для получения его родительский контроль) или this.ParentForm (для получения его родительских окон). Вы можете использовать этот синтаксис внутри любого из методов, определенных внутри вашего класса menu. Например. Я могу сделать что-то подобное в одном из ваших методов:

public create_menu(int value, int start_x, int start_y, int x_interval, int y_interval, List<string> str) 
{ 
    //other code 
    Console.WriteLine(this.Parent.Name); 
} 

Надеюсь, это поможет!