Win Forms DataGridView Горизонтальная полоса прокрутки - PullRequest
2 голосов
/ 13 марта 2011

Можно ли постоянно отображать горизонтальную полосу прокрутки DataGridView в Windows Forms 2.0.Как мы можем сделать на горизонтальной полосе прокрутки панели.

В настоящее время горизонтальная полоса прокрутки видна только тогда, когда общая сумма ширины столбцов больше, чем ширина DataGridView.Но я хочу, чтобы эта полоса прокрутки была всегда видна.

Спасибо

1 Ответ

2 голосов
/ 13 марта 2011

Как уже упоминалось в комментариях, 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);
    }
}

надеюсь, это поможет, с уважением

...