【问题标题】:How to create MaterialSingleLineTextField Controls dynamically如何动态创建 MaterialSingleLineTextField 控件
【发布时间】:2021-03-10 12:08:07
【问题描述】:

我想将MaterialSingleLineTextField 动态添加到表单中。
我用过MaterialSkin NuGet 包:

我正在尝试在 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;
    }
}

这个代码块对于普通的文本框来说非常好。
有没有办法动态添加MaterialSingleLineTextField

【问题讨论】:

    标签: c# winforms material-design windows-forms-designer


    【解决方案1】:

    带有默认主题值的表单初始化示例。

    • MaterialSkinManager 在表单构造函数中初始化,将主题设置为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);
        }
    }
    

    示例功能:

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 2011-06-10
      • 2011-06-27
      • 1970-01-01
      • 2012-10-03
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多