通过代码

时间:2017-07-27 17:05:04

标签: c# .net windows winforms visual-studio

我正在制作服务器管理器,它需要能够添加和删除服务器。我希望它有一个漂亮的界面,所以我决定在一个包含4个标签的图片框上显示的服务器打印出服务器的不同统计数据。我的问题是,让我们说该程序的用户有500台服务器,为了实现这一点,我唯一知道如何做的就是在代码中创建,定义和填充图片框和标签。 EX :(这是我的标题,但这就是我实现服务器“卡”的方式)

private PictureBox headerArea = new PictureBox();
    private PictureBox dropShadow = new PictureBox();
    private Label headerText = new Label();

    public Suite()
    {
        InitializeComponent();
    }

    private void Suite_Load(object sender, EventArgs e)
    {
        guiInit();
    }

    private void guiInit()
    {
        //Header Text
        this.headerText.AutoSize = true;
        this.headerText.BackColor = System.Drawing.Color.DarkSlateBlue;
        this.headerText.Font = new System.Drawing.Font("Roboto Lt", 22F);
        this.headerText.ForeColor = System.Drawing.SystemColors.ButtonFace;
        this.headerText.Location = new System.Drawing.Point(12, 10);
        this.headerText.Name = "headerText";
        this.headerText.Size = new System.Drawing.Size(178, 29);
        this.headerText.TabIndex = 0;
        this.headerText.Text = "Server Manager";
        this.Controls.Add(headerText);

        //Background GUI
        this.headerArea.BackColor = Color.DarkSlateBlue;
        this.headerArea.Size = new System.Drawing.Size(1920, 60);
        this.headerArea.Location = new System.Drawing.Point(0, 0);
        this.Controls.Add(headerArea);

        //Drop Shadow
        this.dropShadow.Image = 
        global::ServerManager.Properties.Resources.dropshadow2;
        this.dropShadow.BackgroundImageLayout = 
        System.Windows.Forms.ImageLayout.Stretch;
        this.dropShadow.Location = new System.Drawing.Point(0, 47);
        this.dropShadow.Name = "dropShadow";
        this.dropShadow.Size = new System.Drawing.Size(1920, 65);
        this.dropShadow.TabIndex = 0;
        this.dropShadow.TabStop = false;
        this.Controls.Add(dropShadow);
    }

这个问题是如果我需要显示500个服务器,我会有2500行代码。 有没有办法可以创建一个生成这些表单的方法或更好的方法来实现这个目标?

3 个答案:

答案 0 :(得分:0)

如果您希望减少所拥有的代码行数,则应使用一种方法来接收您希望更改的参数。这里有一些示例代码可以帮助您入门。

private void DoThis(string a, string b, string c, string d)
{
    //Create your labels
    //Set the label texts equal to each string.
}

构造函数中的变量(括号)也必须包含在您的调用中。你可以用

来调用它
DoThis("text1", "text2", "text3", "text4")

答案 1 :(得分:0)

我真的不懂你的话。我不擅长英语。 你想只在一个中创建500个控件吗?

    //set the control's initial location
    const int HEADERTEXTLOCATIONX = 0;
    const int HEADERTEXTLOCATIONY = 0;
    //set the control's offset value
    const int OFFSETX = 30;
    const int OFFSETY = 20;

    List<Label> headerTextList = new List<Label>();
    private void creatSubControls(int controlsCount)
    {
        for (int item = 0; item < controlsCount; item++)
        {
            guiInit(item);
        }
    }

    private void guiInit(int iControl)
    {
        Label headerText = new Label();
        int offsetX = iControl * OFFSETX;
        int offsetY = iControl * OFFSETY;
        //Header Text
        headerText.AutoSize = true;
        headerText.BackColor = System.Drawing.Color.DarkSlateBlue;
        headerText.Font = new System.Drawing.Font("Roboto Lt", 22F);
        headerText.ForeColor = System.Drawing.SystemColors.ButtonFace;
        headerText.Location = new System.Drawing.Point(HEADERTEXTLOCATIONX + offsetX, HEADERTEXTLOCATIONY + offsetY);
        headerText.Name = "headerText";
        headerText.Size = new System.Drawing.Size(178, 29);
        headerText.TabIndex = 0;
        headerText.Text = "Server Manager" + (iControl + 1).ToString();
        Controls.Add(headerText);
    }

答案 2 :(得分:0)

感谢所有帮助,因为我对Winforms缺乏了解,所以不知道要输入什么。 这或多或少都是我想要的:

for (int i = 0; i < 10; i++)
        {
            Button button = new Button();
            button.Left = left;
            button.Top = top;
            this.Controls.Add(button);
            top += button.Height + 2;
        }