【问题标题】:C# how to add class's labels to form's controlC#如何为表单控件添加类标签
【发布时间】:2017-05-11 08:16:40
【问题描述】:

我正在制作菜单类,让我可以轻松控制菜单
为了便于理解,请看下图


如果我想制作这些菜单,我会创建我的菜单类并向该类添加 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]); }

有没有更好的想法?

【问题讨论】:

  • 如果我没听错 - 你有一个菜单控件,上面有几个标签来显示菜单结构。当您将该菜单控件的实例添加到表单form1 时,菜单控件上的所有标签都将添加到您的表单中。我是否正确解释了它?在这种情况下,您的菜单控件将是菜单标签的父级,而 form1 将是菜单控件的父级。那么您在这里面临的具体问题是什么?
  • @RBT 是的,但我想知道类如何控制它的父级

标签: c# class menu controls


【解决方案1】:

你需要稍微调整一下你的班级。只需从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);
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 2017-06-28
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多