c# datagridview 如何在 header 上对齐 TextBox
c# datagridview how to align a TextBox over the header
我有这个问题:我需要在我的 DataGridView
的 header 列上放置一个 TextBox
。为了找到它,我开始读取列的矩形以检索左侧位置和宽度..
Rectangle rec = dgv.GetColumnDisplayRectangle(mycolumnIndex, true);
这工作正常,但如果网格不包含任何行,则 Rectangle
为 0..
有什么想法吗?
谢谢
无论是否有any行或selected行,从[=12=返回的Rectangle
] 对于任何 visible 列总是正确的。
如果它对你来说是Empty
,那么你的Column
要么不可见要么滚动显示区域。
在 ColumnWidthChanged
和 Scroll
事件之后,您需要设置 TextBox
或放置在那里的任何 Control
的位置。此外,每当您 隐藏 或 显示 列时。
这是一个工作示例:
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Parent = dataGridView1; // nest the TextBox
placeControl(dataGridView1, textBox1, 2); // place it over the 3rd column header
}
private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
placeControl(dataGridView1, textBox1, 2);
}
private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
placeControl(dataGridView1, textBox1, 2);
}
void placeControl(DataGridView dgv, Control ctl, int index)
{
Rectangle R = dgv.GetColumnDisplayRectangle(index, true ); // or false
ctl.Location = R.Location;
ctl.Size = new Size(R.Width, dgv.ColumnHeadersHeight);
}
我有这个问题:我需要在我的 DataGridView
的 header 列上放置一个 TextBox
。为了找到它,我开始读取列的矩形以检索左侧位置和宽度..
Rectangle rec = dgv.GetColumnDisplayRectangle(mycolumnIndex, true);
这工作正常,但如果网格不包含任何行,则 Rectangle
为 0..
有什么想法吗?
谢谢
无论是否有any行或selected行,从[=12=返回的Rectangle
] 对于任何 visible 列总是正确的。
如果它对你来说是Empty
,那么你的Column
要么不可见要么滚动显示区域。
在 ColumnWidthChanged
和 Scroll
事件之后,您需要设置 TextBox
或放置在那里的任何 Control
的位置。此外,每当您 隐藏 或 显示 列时。
这是一个工作示例:
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Parent = dataGridView1; // nest the TextBox
placeControl(dataGridView1, textBox1, 2); // place it over the 3rd column header
}
private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
placeControl(dataGridView1, textBox1, 2);
}
private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
placeControl(dataGridView1, textBox1, 2);
}
void placeControl(DataGridView dgv, Control ctl, int index)
{
Rectangle R = dgv.GetColumnDisplayRectangle(index, true ); // or false
ctl.Location = R.Location;
ctl.Size = new Size(R.Width, dgv.ColumnHeadersHeight);
}