【问题标题】:c# datagridview how to align a TextBox over the headerc#datagridview如何在标题上对齐一个TextBox
【发布时间】:2015-11-11 06:09:46
【问题描述】:

我有这个问题:我需要在我的DataGridView.. 的列标题上放置一个TextBox。为了找到它,我开始读取列的矩形以检索左侧位置和宽度..

Rectangle rec = dgv.GetColumnDisplayRectangle(mycolumnIndex, true);

这工作正常,但如果网格不包含行,Rectangle 为 0..

有什么想法吗?

谢谢

【问题讨论】:

  • 无法重现,Rectangle 总是在重新调整 Header 的位置和宽度,不管有没有行。
  • 感谢@TaW,但对我来说,如果没有选择行,则使用 Visual Studio 2013 返回一个矩形 0,0,0,0,因为矩形是标题下方的列区域

标签: c# winforms datagridview .net-4.0 datagridviewcolumn


【解决方案1】:

无论是否有any行或selected行,从GetColumnDisplayRectangle返回的Rectangle对于任何可见总是正确的strong> 列。

如果您的Empty,那么您的Column 在显示区域之外不可见滚动

您需要在ColumnWidthChangedScroll 事件之后设置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);
}   

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 2017-04-17
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多