如何动态创建 MaterialSingleLineTextField 控件
How to create MaterialSingleLineTextField Controls dynamically
我想将 MaterialSingleLineTextField
动态添加到表单。
我用过 MaterialSkin NuGet 包:
我正在尝试在 Form.Load 上动态创建多个 MaterialSkin 文本框。但是在 hosing 面板中没有显示控件。
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
?
具有默认主题值的表单初始化示例。
MaterialSkinManager
在表单构造函数中初始化,将主题设置为 MaterialSkinManager.Themes.LIGHT
和默认配色方案。表单基本类型设置为 MaterialForm
.
- 指定数量的
MaterialSingleLineTextField
控件被添加到父容器(面板),从定义的位置开始向下。
这些控件锚定到父控件,高度设置为 Parent.Font.Height + 4
。
- 指定这些控件的大小很重要,否则您将获得一个最小的大小,阻止控件显示其内容。
- 正如您在
AddTextFields()
方法中看到的那样,如果您想用新的控件替换现有的控件,请务必处理添加到父容器的先前控件。更重要的是使用这个库。
调用 Control.Controls
集合的 Clear()
方法(如您注释掉的那一行)不会处理任何东西,这些控件仍然 alive.
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);
}
}
示例功能:
我想将 MaterialSingleLineTextField
动态添加到表单。
我用过 MaterialSkin NuGet 包:
我正在尝试在 Form.Load 上动态创建多个 MaterialSkin 文本框。但是在 hosing 面板中没有显示控件。
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
?
具有默认主题值的表单初始化示例。
MaterialSkinManager
在表单构造函数中初始化,将主题设置为MaterialSkinManager.Themes.LIGHT
和默认配色方案。表单基本类型设置为MaterialForm
.- 指定数量的
MaterialSingleLineTextField
控件被添加到父容器(面板),从定义的位置开始向下。 这些控件锚定到父控件,高度设置为Parent.Font.Height + 4
。- 指定这些控件的大小很重要,否则您将获得一个最小的大小,阻止控件显示其内容。
- 正如您在
AddTextFields()
方法中看到的那样,如果您想用新的控件替换现有的控件,请务必处理添加到父容器的先前控件。更重要的是使用这个库。
调用Control.Controls
集合的Clear()
方法(如您注释掉的那一行)不会处理任何东西,这些控件仍然 alive.
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);
}
}
示例功能: