Я написал программу, которая считывает объект .json и создает метки и некоторые элементы управления в трех TableLayoutPanels. Первые две таблицы находятся на странице 1 TabPanel, а последняя — на странице 2.
Проблема в следующем: ЕСЛИ в начале программы я автоматически добавляю элементы управления в таблицы ИЛИ если Я просматриваю страницу 2 и добавляю элементы управления вручную, последняя таблица не отображает добавленные элементы управления.
Я могу войти в консольный журнал, и там есть все элементы управления, но они просто не отображаются.
Таблица работает только ЕСЛИ Я нахожусь на странице 1 и добавляю элементы управления вручную. Во всех трех случаях код добавления элементов управления один и тот же. Просто он ведет себя по-разному, смотрю ли я на страницу 2 или нет, или запускается при запуске. Для меня это не имеет смысла.
Gif 1, как это должно работать: в данном случае я нахожусь на странице 1 и вручную загружаю файл json, чтобы добавить элементы управления.
Gif 2. Я открываю программу, и она автоматически загружает json и добавляет элементы управления. Элементы управления в LayoutTable на странице 2 не отображаются.
Gif 3 Я «просматриваю» таблицу на странице 2 и загружаю файл JSON. Элементы управления также не отображаются.
Я уже пробовал вызывать tablelayoutpanel.Refresh() или .Invalidade(), не помогло. Попробовал установить двойную буферизацию true и false, не работает.
ps: «добавление элементов управления вручную» означает, что я нажимаю кнопку, чтобы загрузить json, и элементы управления добавляются.Код, добавляющий элементы управления на панели:
LabelData labelData;
List publicZPLFields = new List();
List publicControls = new List();
List privateZPLFields = new List();
List privateControls = new List();
List privateDataControls = new List();
List dataMatrixFields = new List();
List dataMatrixControls = new List();
public void LoadLabelData(LabelData data)
{
#region clear lists and dispose controls
for (int i = 0; i < publicControls.Count; i++)
{
publicTablePanel.Controls.Remove(publicControls);
publicControls.Dispose();
}
publicControls.Clear();
for (int i = 0; i < privateControls.Count; i++)
{
privateTablePanel.Controls.Remove(privateControls);
privateControls.Dispose();
}
privateControls.Clear();
for (int i = 0; i < privateDataControls.Count; i++)
{
privateDataTablePanel.Controls.Remove(privateDataControls);
privateDataControls.Dispose();
}
privateDataControls.Clear();
dataMatrixControls.Clear();
#endregion
labelData = data;
publicZPLFields = data.LabelDataList.Where(d => !d.IsPrivate && d.ListMe).ToList();
privateZPLFields = data.LabelDataList.Where(d => d.IsPrivate && d.ListMe).ToList();
dataMatrixFields = data.LabelDataList.Where(d => d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH).ToList();
AnchorStyles a = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
Padding m = new Padding(1);
//adding the controls to the first table layout panel in the first page
int row = 1;
foreach (var d in publicZPLFields)
{
Label label = new Label();
label.Text = d.Name;
label.TextAlign = ContentAlignment.MiddleLeft;
publicTablePanel.Controls.Add(label, 0, row);
publicControls.Add(label);
switch (d.FieldType)
{
case FieldType.Text:
TextBox tb = new TextBox();
tb.Name = d.Name;
tb.Margin = m;
tb.Anchor = a;
tb.Text = d.defaultText;
tb.KeyPress += textBox_KeyPressed;
tb.TextChanged += updateZpl_TextChanged;
publicTablePanel.Controls.Add(tb, 1, row);
publicControls.Add(tb);
if(d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH)
dataMatrixControls.Add(tb);
break;
case FieldType.Date:
DateTimePicker dtp = new DateTimePicker();
dtp.Name = d.Name;
dtp.Margin = m;
dtp.Anchor = a;
dtp.Value = d.DateType == FieldDateType.TODAY ? DateTime.Today : d.defaultTime;
if(d.DateType == FieldDateType.TODAY)
dtp.Enabled = false;
publicTablePanel.Controls.Add(dtp, 1, row);
publicControls.Add(dtp);
if (d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH)
dataMatrixControls.Add(dtp);
break;
case FieldType.Serial:
NumericUpDown nud = new NumericUpDown();
nud.Name = d.Name;
nud.Margin = m;
nud.Anchor = a;
nud.Maximum = (int)Math.Pow(10, d.serialMax) - 1;
nud.Value = d.serialStart;
publicTablePanel.Controls.Add(nud, 1, row);
publicControls.Add(nud);
if (d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH)
dataMatrixControls.Add(nud);
break;
}
row++;
}
//adding controls to both "private" table layout panel, the one in the first page and the the one in the second page
row = 1;
foreach(var d in privateZPLFields)
{
Label label = new Label();
label.Text = d.Name;
label.TextAlign = ContentAlignment.MiddleLeft;
privateTablePanel.Controls.Add(label, 0, row);
privateControls.Add(label);
label = label.Clone();
privateDataTablePanel.Controls.Add(label, 0, row);
privateDataControls.Add(label);
switch (d.FieldType)
{
case FieldType.Text:
TextBox tb = new TextBox();
tb.Name = d.Name;
tb.Margin = m;
tb.Anchor = a;
tb.Text = d.defaultText;
tb.Enabled = false;
privateTablePanel.Controls.Add(tb, 1, row);
privateControls.Add(tb);
tb = tb.Clone();
tb.Enabled = true;
tb.KeyPress += textBox_KeyPressed;
tb.TextChanged += updateZpl_TextChanged;
privateDataTablePanel.Controls.Add(tb, 1, row);
privateDataControls.Add(tb);
if (d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH)
dataMatrixControls.Add(tb);
break;
case FieldType.Date:
DateTimePicker dtp = new DateTimePicker();
dtp.Name = d.Name;
dtp.Margin = m;
dtp.Anchor = a;
dtp.Value = d.DateType == FieldDateType.TODAY ? DateTime.Today : d.defaultTime;
dtp.Enabled = false;
privateTablePanel.Controls.Add(dtp, 1, row);
privateControls.Add(dtp);
dtp = dtp.Clone();
dtp.Enabled = d.DateType == FieldDateType.CUSTOM;
privateDataTablePanel.Controls.Add(dtp, 1, row);
privateDataControls.Add(dtp);
if (d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH)
dataMatrixControls.Add(dtp);
break;
case FieldType.Serial:
NumericUpDown nud = new NumericUpDown();
nud.Name = d.Name;
nud.Margin = m;
nud.Anchor = a;
nud.Maximum = (int)Math.Pow(10, d.serialMax) - 1;
nud.Value = d.serialStart;
nud.Enabled = false;
privateTablePanel.Controls.Add(nud, 1, row);
privateControls.Add(nud);
nud = nud.Clone();
nud.Enabled = true;
privateDataTablePanel.Controls.Add(nud, 1, row);
privateDataControls.Add(nud);
if (d.Visibility == FieldVisibility.DM || d.Visibility == FieldVisibility.BOTH)
dataMatrixControls.Add(nud);
break;
}
row++;
}
UpdateFinalZPL(labelData.sampleCode);
#region setup table layout panels
publicTablePanel.AutoScroll = true;
privateTablePanel.AutoScroll = true;
privateDataTablePanel.AutoScroll = true;
#endregion
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... r-at-the-s
Панель Tablelayout не отображает дочерние элементы управления при просмотре или в начале программы. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как сделать дочерние элементы программы чтения с экрана необязательными на Android
Anonymous » » в форуме Android - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-