Мне нужно получить имена столбцов и сохранить их в другой форме как метки и получить новое текстовое поле для каждой метки. Итак, я пробую этот код, и это ответ. Я его отлаживал, все работает нормально. Любые предложения, где проблема может быть?
Я получаю только имя первого столбца.

int location = 10;
int locationHeight = 10;
int locationHeightlbl = 10;
TextBox[] txtBox = new TextBox[DM.dataGridView1.Columns.Count];
Label[] labels = new Label[DM.dataGridView1.Columns.Count];
foreach (DataGridViewColumn column in DM.dataGridView1.Columns)
{
labels[column.Index] = new Label();
labels[column.Index].Text = column.HeaderText;
labels[column.Index].Location = new Point(location, locationHeightlbl);
txtBox[column.Index] = new TextBox();
txtBox[column.Index].Location = new Point(location, locationHeight + 25);
this.Controls.Add(labels[column.Index]);
this.Controls.Add(txtBox[column.Index]);
locationHeight += 25;
locationHeightlbl += 25;
}





как уже упоминалось в комментарии. Ваши ярлыки хорошо спрятаны за текстовыми полями. Чтобы решить эту проблему, просто увеличьте приращение:
locationHeight += 50;
locationHeightlbl += 50;
Но я бы предложил в таком сценарии использовать FlowLayoutPanel. Он упорядочит элементы самостоятельно. Вам нужно только указать FlowDirection. (и это намного меньше кода :)
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.FlowDirection = FlowDirection.TopDown;
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
panel.Controls.Add(new Label() { Text = column.HeaderText });
panel.Controls.Add(new TextBox());
}
this.Controls.Add(panel);
Можно ли использовать TableLayoutPanel в вашем приложении? Я рекомендую использовать его. Взгляните на код:
TextBox[] txtBox = new TextBox[DM.dataGridView1.Columns.Count];
Label[] labels = new Label[DM.dataGridView1.Columns.Count];
TableLayoutPanel tableLayoutPanel = new TableLayoutPanel() { AutoSize = true };
tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
int n = 0;
foreach (DataGridViewColumn column in DM.dataGridView1.Columns)
{
labels[column.Index] = new Label();
labels[column.Index].Text = column.HeaderText;
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tableLayoutPanel.SetCellPosition(labels[column.Index], new TableLayoutPanelCellPosition(0, n++));
tableLayoutPanel.Controls.Add(labels[column.Index]);
txtBox[column.Index] = new TextBox();
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tableLayoutPanel.SetCellPosition(txtBox[column.Index], new TableLayoutPanelCellPosition(0, n++));
tableLayoutPanel.Controls.Add(txtBox[column.Index]);
}
Controls.Add(tableLayoutPanel);
Кроме того, рассмотрите возможность использования FlowLayoutPanel.
остальные метки скрыты за текстовыми полями. Как вы планировали сделать макет? Вы пытались увеличить
locationHeightна 50?