2016-12-27 62 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 
      } 
     } 
} 

如果你有更好的想法或知道其他的方式,請告訴我。謝謝



------------------------------------------ -------
通過將控件發送到類,我將標籤添加到表單。

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 
} 

現在,只要你把你的菜單到Windows窗體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); 
} 

希望這有助於!

相關問題