簡體   English   中英

如何動態創建 MaterialSingleLineTextField 控件

[英]How to create MaterialSingleLineTextField Controls dynamically

我想將MaterialSingleLineTextField動態添加到表單中。
我使用了MaterialSkin NuGet package:

在此處輸入圖像描述

我正在嘗試在 Form.Load 上動態創建多個 MaterialSkin 文本框。 但是軟管面板中沒有顯示任何控件。

private void Form1_Load(object sender, EventArgs e)
{
    
    int n = 5;

    int pointX = 30;
    int pointY = 40;
    //panel1.Controls.Clear();
    for (int i = 0; i < n - 1; i++)
    {
        MaterialSingleLineTextField a = new MaterialSingleLineTextField();
        a.Text = (i + 1).ToString();
        a.Visible = true;
        a.Location = new Point(pointX, pointY);
        panel1.Controls.Add(a);
        panel1.Show();
        pointY += 20;
    }
}

這個代碼塊對於普通的 TextBox 來說工作得很好。
有沒有辦法動態添加MaterialSingleLineTextField

具有默認主題值的示例表單初始化。

  • MaterialSkinManager在 Form Constructor 中初始化,將 Theme 設置為MaterialSkinManager.Themes.LIGHT和默認配色方案。 表單基本類型設置為MaterialForm
  • 指定數量的MaterialSingleLineTextField控件被添加到父容器(面板)中,從定義的位置開始向下。 這些控件錨定到父控件,並且高度設置為Parent.Font.Height + 4
    • 指定這些控件的大小很重要,否則您將獲得阻止控件顯示其內容的最小大小。
  • 正如您在AddTextFields()方法中看到的那樣,如果您想用新的控件替換現有控件,則處理之前添加到父容器的控件非常重要。 使用這個庫更重要。
    調用Control.Controls集合的Clear()方法(如您已注釋掉的行中)不會處理任何內容,這些控件仍然活着
public partial class Form1 : MaterialForm
{
    private readonly MaterialSkinManager msManager = null;

    public Form1()
    {
        InitializeComponent();
        msManager = MaterialSkinManager.Instance;
        msManager.AddFormToManage(this);
        msManager.Theme = MaterialSkinManager.Themes.LIGHT;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        AddTextFields(panel1, 5, new Point(30, 10), false);
    }

    private void AddTextFields(Control parent, int controlsCount, Point startPosition, bool ClearExisting)
    {
        if (clearExisting && parent.Controls.Count > 0) {
            for (int i = parent.Controls.Count - 1; i >= 0; i--) {
                parent.Controls[i].Dispose();
            }
        }

        int controlHeight = parent.Font.Height + 4;
        int yIncrement = 0;

        for (int i = 0; i < controlsCount; i++) {
            var textField = new MaterialSingleLineTextField() {
                Text = (i + 1).ToString(),
                Size = new Size(parent.ClientSize.Width - startPosition.X - 4, controlHeight),
                Location = new Point(startPosition.X, startPosition.Y + yIncrement),
                Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right
            };
            parent.Controls.Add(textField);
            yIncrement += (controlHeight + 10);
        }
    }

    private void matBtnChangeTheme_Click(object sender, EventArgs e)
    {
        msManager.Theme = MaterialSkinManager.Themes.DARK;
        msManager.ColorScheme = new ColorScheme(Primary.Blue600, Primary.Blue900, Primary.Blue500, Accent.LightBlue200, TextShade.WHITE);
    }

    private void matBtnAddControls_Click(object sender, EventArgs e)
    {
        AddTextFields(panel1, 7, new Point(30, 10), true);
    }
}

示例功能:

材質皮膚樣本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM