我尝试根据datagridview中的行的单元格值创建多个文本框,并使用每个值填充文本框。我有它所以它抓取到目前为止的所有数据(使用MessageBox.Show(textBox.text)
),它显示为预期。但是,当我尝试创建文本框时,它只创建一个(我可以在Windows窗体应用程序中看到)。
以下是我点击事件的代码:
qbcDataGridView.RowHeaderMouseClick += (object sender, DataGridViewCellMouseEventArgs e) =>
{
id = Convert.ToInt32(qbcDataGridView.Rows[e.RowIndex].Cells[0].Value.ToString());
// get all the columns and assign them to textboxes text
for (int i = 0; i < qbcDataGridView.Rows[e.RowIndex].Cells.Count; i++)
{
var textBox = new TextBox
{
Name = qbcDataGridView.Rows[e.RowIndex].Cells[i].Value.ToString(),
Font = new Font(qbcDataGridView.Font.FontFamily, 12),
Text = qbcDataGridView.Rows[e.RowIndex].Cells[i].Value.ToString(),
Location = new Point(80, 50)
};
Controls.Add(textBox);
// used for testing
MessageBox.Show(textBox.Text);
}
};
以下是该计划的截图:
主屏幕 -
点击datagridview时的屏幕 -
(我注释掉MessageBox.Show(textBox.Text)
,但它显示3,jimmy,test,test,test,member)
我不知道它的for循环是否会覆盖自身,但这似乎不太可能,因为它通过消息框显示所有数据。我倾向于定位,但我并不完全确定。
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:1)
当我尝试创建文本框时,它只创建一个(我可以在Windows窗体应用程序中看到)。
因为文本框是重叠的。唯一可见的是ID单元格(因为它的z顺序是最高的)。
只需将它们分开,这样它们就不会彼此叠加:
Location = new Point(80 + (i * 50), 50)