Панель Tablelayout не отображает дочерние элементы управления при просмотре или в начале программы.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Панель Tablelayout не отображает дочерние элементы управления при просмотре или в начале программы.

Сообщение Anonymous »

Я написал программу, которая считывает объект .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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»