检查数据网格视图中是否显示滚动条

时间:2014-06-30 21:47:02

标签: c# .net winforms datagridview

如果数据网格视图很长并显示滚动条但我不知道如何检查滚动条是否可见,我想显示一些内容。我不能简单地添加行,因为有些行可能不可见。我不能使用事件,因为我的代码已经出现在事件中。

5 个答案:

答案 0 :(得分:12)

你可以尝试一下:

foreach (var scroll in dataGridView1.Controls.OfType<VScrollBar>())
{
   //your checking here
   //specifically... if(scroll.Visible)
}

答案 1 :(得分:5)

我更喜欢这个:

//modif is a modifier for the adjustment of the Client size of the DGV window
//getDGVWidth() is a custom method to get needed width of the DataGridView

int modif = 0;
if (DataGridView.Controls.OfType<VScrollBar>().First().Visible)
{
    modif = SystemInformation.VerticalScrollBarWidth;
}
this.ClientSize = new Size(getDGVWidth() + modif, [wantedSizeOfWindow]);

所以你需要的唯一布尔条件是:

if (DataGridView.Controls.OfType<VScrollBar>().First().Visible)
{
    //want you want to do
}

答案 2 :(得分:3)

使用DataGridView 枚举可以质疑Scrollbars&#39; ScrollBars 属性你感兴趣的一个:

if ((dataGridView1.ScrollBars & ScrollBars.Vertical) != ScrollBars.None) ...

注意,两个&#39; ScrollBars&#39;这里有不同的东西!

答案 3 :(得分:2)

要确定是否存在垂直滚动条,您需要检查可见行的高度,并与datagridview高度进行比较。

if(dgv1.Height > dgv1.Rows.GetRowsHeight(DataGridViewElementStates.Visible))
{
    // Scrollbar not visible
}
else
{
    // Scrollbar visible
}

虽然为了更精确,您可能需要检查列宽,因为水平滚动条的存在可能会创建一个垂直滚动条,否则就不存在。

答案 4 :(得分:0)

仅当您使用System.Linq名称空间时,terrybozzio的答案才有效。 下面显示了不使用System.Linq的解决方案:

foreach (var Control in dataGridView1.Controls)
{
    if (Control.GetType() == typeof(VScrollBar))
    {
        //your checking here
        //specifically... if (((VScrollBar)Control).Visible)
    }
}