数组依次在面板中输出到标签 C#
the output of the array in turn in panel to labels C#
我遇到了这个问题。我有一个带有 20 个标签的面板。函数生成器()为每个标签分配数组的编号。每个数字从 1 滚动到所需的数字。但问题是这个号码是乱序分配的。例如,第一个数字分配给 1 个标签,下一个数字分配给 10 个标签,下一个分配给 2,下一个分配给 11 等。
但我需要按 rtl 或 ltr 顺序输出数字。
我不知道如何修复它。请帮忙。
public void generator() // присваивание текстбоксам значений
{
generatedArray = getUniqueRandomArray(1, 81, 20).ToArray();
for (int i = 0; i < panel1.Controls.Count; i++)
{
for (int j = 1; j < generatedArray[i] + 1; j++)
{
panel1.Controls[i].Text = j.ToString();
Thread.Sleep(50);
panel1.Controls[i].Refresh();
}
}
}
我将不胜感激:)
为此,您可以使用自己的一些控件,以便更好地定义它们的行为(并批量执行)。
派生自标签的自定义 class:
List<MyLabel> MyLabels = new List<MyLabel>();
public class MyLabel : Label
{
public MyLabel()
{
//Define some default properties
this.TextAlign = ContentAlignment.MiddleCenter;
this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.Font = new Font("Calibri", 9f, FontStyle.Regular);
this.BackColor = Color.White;
this.ForeColor = Color.Black;
this.Size = new Size(50, 20);
}
}
在面板中插入一组自定义标签(这也可以是自定义控件)。
int LeftMargin = 20;
int TopMargin = 20;
int NumberOfLabels = 20;
int LabelsPerRow = 5;
int LabelsDistance = 10;
int _idx = 0;
for (int y = 0; y < (NumberOfLabels / LabelsPerRow); y++)
{
for (int x = 0; x < LabelsPerRow; x++)
{
MyLabels.Add(new MyLabel() { Parent = this.panel1 });
MyLabels[_idx].Location = new Point((LeftMargin + ((MyLabels[_idx].Width + LabelsDistance) * x)),
(TopMargin + ((MyLabels[_idx].Height + LabelsDistance) * y)));
_idx++;
}
}
这是结果:
如果您只是更改这些字段:
int LeftMargin = 1;
int TopMargin = 1;
int NumberOfLabels = 20;
int LabelsPerRow = 20;
int LabelsDistance = 1;
你明白了:
然后,调用您的 generator()
方法来填充 UI:
generator();
public async void generator()
{
generatedArray = getUniqueRandomArray(1, 81, 20).ToArray();
for (int i = 0; i < MyLabels.Count; i++)
{
for (int j = 1; j < generatedArray[i] + 1; j++)
{
await Task.Run(async () => await Task.Delay(500));
//Set the text property of the custom labels. The order will be respected
MyLabels[i].Text = j.ToString();
}
}
您还可以通过 Panel.Controls[] 数组设置标签文本 属性。
this.panel1.Controls[i].Text = j.ToString();
订单也会得到遵守,但如果父表单关闭,则会导致 ArgumentOutOfRange 异常。
我遇到了这个问题。我有一个带有 20 个标签的面板。函数生成器()为每个标签分配数组的编号。每个数字从 1 滚动到所需的数字。但问题是这个号码是乱序分配的。例如,第一个数字分配给 1 个标签,下一个数字分配给 10 个标签,下一个分配给 2,下一个分配给 11 等。
但我需要按 rtl 或 ltr 顺序输出数字。
我不知道如何修复它。请帮忙。
public void generator() // присваивание текстбоксам значений
{
generatedArray = getUniqueRandomArray(1, 81, 20).ToArray();
for (int i = 0; i < panel1.Controls.Count; i++)
{
for (int j = 1; j < generatedArray[i] + 1; j++)
{
panel1.Controls[i].Text = j.ToString();
Thread.Sleep(50);
panel1.Controls[i].Refresh();
}
}
}
我将不胜感激:)
为此,您可以使用自己的一些控件,以便更好地定义它们的行为(并批量执行)。
派生自标签的自定义 class:
List<MyLabel> MyLabels = new List<MyLabel>();
public class MyLabel : Label
{
public MyLabel()
{
//Define some default properties
this.TextAlign = ContentAlignment.MiddleCenter;
this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.Font = new Font("Calibri", 9f, FontStyle.Regular);
this.BackColor = Color.White;
this.ForeColor = Color.Black;
this.Size = new Size(50, 20);
}
}
在面板中插入一组自定义标签(这也可以是自定义控件)。
int LeftMargin = 20;
int TopMargin = 20;
int NumberOfLabels = 20;
int LabelsPerRow = 5;
int LabelsDistance = 10;
int _idx = 0;
for (int y = 0; y < (NumberOfLabels / LabelsPerRow); y++)
{
for (int x = 0; x < LabelsPerRow; x++)
{
MyLabels.Add(new MyLabel() { Parent = this.panel1 });
MyLabels[_idx].Location = new Point((LeftMargin + ((MyLabels[_idx].Width + LabelsDistance) * x)),
(TopMargin + ((MyLabels[_idx].Height + LabelsDistance) * y)));
_idx++;
}
}
这是结果:
如果您只是更改这些字段:
int LeftMargin = 1;
int TopMargin = 1;
int NumberOfLabels = 20;
int LabelsPerRow = 20;
int LabelsDistance = 1;
你明白了:
然后,调用您的 generator()
方法来填充 UI:
generator();
public async void generator()
{
generatedArray = getUniqueRandomArray(1, 81, 20).ToArray();
for (int i = 0; i < MyLabels.Count; i++)
{
for (int j = 1; j < generatedArray[i] + 1; j++)
{
await Task.Run(async () => await Task.Delay(500));
//Set the text property of the custom labels. The order will be respected
MyLabels[i].Text = j.ToString();
}
}
您还可以通过 Panel.Controls[] 数组设置标签文本 属性。
this.panel1.Controls[i].Text = j.ToString();
订单也会得到遵守,但如果父表单关闭,则会导致 ArgumentOutOfRange 异常。