2014-06-30 38 views
8

Tôi muốn hiển thị điều gì đó nếu lưới dữ liệu Xem dài và hiển thị thanh cuộn nhưng không biết cách kiểm tra xem thanh cuộn có hiển thị hay không. Tôi không thể chỉ cần thêm các hàng vì một số hàng có thể không hiển thị. Tôi không thể sử dụng sự kiện vì mã của tôi đã có trong một sự kiện.kiểm tra xem thanh cuộn có hiển thị trong chế độ xem dữ liệu

+0

Cần biết thêm chi tiết. Bạn đã thử gì? chính xác là bạn muốn làm gì ? – Alezis

+0

Tôi đang thêm một chỉ báo bên cạnh thanh cuộn cho biết thông tin quan trọng ở đâu, tương tự như studio trực quan. – user373864q

+1

Tôi không chắc chắn chính xác bạn muốn nói gì. Bạn đã thử http://stackoverflow.com/questions/2685651/how-to-detect-the-vertical-scrollbar-in-a-datagridview-control này hay chỉ kiểm tra thuộc tính 'Có thể nhìn thấy 'của thanh cuộn? – Alezis

Trả lời

9

bạn có thể thử này ra:

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

hoặc rất tốt. – barlop

+0

@barlop thanks :) – terrybozzio

+0

kết thúc bằng cách sử dụng phương pháp đó để có được một datagridview với chiều rộng chính xác, mặc dù nó có nghĩa là incrementing chiều rộng của datagridview bởi một cho đến khi thanh cuộn ngang không nhìn thấy được http://stackoverflow.com/questions/37635932/tính toán-padding-of-datagridview-khi-padding-là-lớn hơn hai Nếu bạn biết một cách hiệu quả hơn làm cho tôi biết. Ta – barlop

2

Để xác định xem thanh cuộn dọc có hiện diện hay không, bạn cần kiểm tra chiều cao của hàng hiển thị và so sánh với chiều cao datagridview.

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

Mặc dù chính xác hơn, bạn có thể cần phải kiểm tra độ rộng cột khi có thanh cuộn ngang có thể tạo thanh cuộn dọc mà không có ở đó.

3

Các DataGridView 's Scrollbarstài sản thể bị thẩm vấn bằng cách sử dụng ScrollBarsEnumeration bởi mặt nạ nó với một trong những bạn quan tâm đến như thế này:

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

Lưu ý, rằng hai 'cuộn' là những thứ khác nhau ở đây!

+0

cũng chương trình này tạo ra một datagridview, mà some'y không có thanh cuộn mặc dù dòng đó cho thấy nó như có chúng http://pastebin.com/raw/vfu6j09T – barlop

+0

Sory, nhưng tôi không hiểu. – TaW

+0

Tôi nghĩ rằng tôi đã nói rằng trong mã tại liên kết pastebin nó luôn luôn cho thấy rằng hộp thư ngay cả khi datagridview không có thanh cuộn – barlop

4

tôi thích cái này:

//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]); 

nên tình trạng Boolean duy nhất bạn cần là:

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

Giải pháp tốt. Tôi đề nghị thêm một kiểm tra bổ sung vì First() có thể ném một ngoại lệ: 'var vScrollBar = dgvEntity.Controls.OfType () .irstOrDefault(); if (vScrollBar! = Null && vScrollBar.Visible) vScrollbarWidth = SystemInformation.VerticalScrollBarWidth; ' – jacktric

Các vấn đề liên quan