我正在制作菜单课,让我轻松控制菜单
为便于理解,请查看下图。
如果我想制作这些菜单,我会创建菜单类并在课程中添加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 :(得分: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);
}
希望这有帮助!