Win Forms DataGridView Horizo​​ntal ScrollBar

时间:2011-03-13 13:57:45

标签: .net winforms datagridview scrollbar

是否可以在Windows Forms 2.0中显示永久 DataGridView的水平滚动条。就像我们可以在Panel的水平滚动条中那样。

目前,只有当列的宽度总和大于DataGridView宽度时,水平ScrollBar才可见。但我希望这个滚动条始终可见。

由于

1 个答案:

答案 0 :(得分:2)

正如在评论中提到的那样,DataGridView控制其滚动条,并且如果不需要查看滚动条,则总是想隐藏它们,例如所有细胞都适合网格的可见区域。

但是,有一种方法可以强制DataGridView使用反射显示其滚动条,虽然它是一个黑客,我不建议这样做。以下是一个例子:

public Form1()
{
    InitializeComponent();

    // assuming dataGridView1 is a DataGridView control placed on the Form1 form
    PropertyInfo property = dataGridView1.GetType().GetProperty(
        "HorizontalScrollBar", BindingFlags.NonPublic | BindingFlags.Instance);
    if (property != null)
    {
        ScrollBar scrollbar = (ScrollBar)property.GetValue(dataGridView1, null);
        scrollbar.Visible = true;
        scrollbar.VisibleChanged += new EventHandler(ScrollBar_VisibleChanged);
    }
}

void ScrollBar_VisibleChanged(object sender, EventArgs e)
{
    FieldInfo field = dataGridView1.GetType().GetField(
        "layout", BindingFlags.NonPublic | BindingFlags.Instance);
    if (field != null)
    {
        object layoutData = field.GetValue(dataGridView1);
        FieldInfo insideField = layoutData.GetType().GetField(
            "Inside", BindingFlags.Public | BindingFlags.Instance);
        Rectangle rect = (Rectangle)insideField.GetValue(layoutData); 

        ScrollBar scrollBar = (ScrollBar)sender;
        scrollBar.Visible = true;
        scrollBar.SetBounds(
            rect.Left, rect.Height - scrollBar.Height + 1,
            rect.Width, scrollBar.Height);
    }
}

希望这有帮助,尊重