当前位置: 首页 > 编程语言 > C#

如何检测DataGridView控件中的垂直滚动条分享

时间:2023-04-10 21:26:52 C#

如何检测DataGridView控件中的垂直滚动条在vs2008中使用winforms。我有一个DataGridView,我想检测垂直滚动条何时可见。我应该注册什么活动?我在网格的最后一列中添加每个单元格值的总和,并在DataGridView底部的文本框中显示该值。我希望此文本框与单元格值保持对齐(即使在滚动条存在后,我也会对齐它们,因为它是$$值)。压倒性的DGV行为通常是一个巨大的颈部疼痛。不过,这很快就会到来。在表单中添加一个新类并粘贴如下所示的代码。编译。将新控件从工具栏顶部拖放到窗体上。实施ScrollbarVisibleChanged事件。使用系统;使用System.Windows.Forms;类MyDgv:DataGridView{公共事件EventHandlerScrollbarVisibleChanged;publicMyDgv(){this.VerticalScrollBar.VisibleChanged+=newEventHandler(VerticalScrollBar_VisibleChanged);}publicboolVerticalScrollbarVisible{get{returnVerticalScrollBar.Visible;}}privatevoidVerticalScrollBar_VisibleChanged(objectsender,EventArgse){EventHandlerhandler=ScrollbarVisibleChanged;如果(处理程序!=null)处理程序(这个,e);}}varvScrollbar=dataGridView1.Controls.OfType().First();if(vScrollbar.Visible){}除了使用Linq(AdamButler),您还可以循环遍历控件并注册一个事件处理程序,每次滚动条可见性发生变化时都会调用该事件处理程序。我以这种方式实现它并且它完美地工作:privateSystem.Windows.Forms.DataGridViewdgCounterValues;私有Int32_DataGridViewScrollbarWidth;//获取垂直滚动条可见性处理程序foreach(ControlcindgCounterValues.Controls)if(c.GetType().ToString().Contains("VScrollBar")){c.VisibleChanged+=c_VisibleChanged;在InitializeComponent()之后的某处执行此操作在处理程序中,执行您需要执行的任何操作以响应的垂直滚动条可见性更改。水平滚动条的工作方式相同(用HScrollBar替换VScrollBar):voidc_VisibleChanged(objectsender,EventArgse){if(vb.Visible)_DataGridViewScrollbarWidth=vb.Width;否则_DataGridViewScrollbarWidth=0;我认为没有事件......但是你可以在网格可以增长的任何地方尝试这样的事情:我给了HansPassant一个复选标记,因为他回答了问题......但是,我采取了另一条路线来解决问题。由于对话框是模态的,因此项目列表不会从创建时更改。所以我可以调用下面的代码来确保在对话框首次显示时文本框处于正确的位置。//////水平移动显示总值的标签和文本框///以便总计与列保持对齐。///privatevoidShiftTotalsDisplay(DataGridViewgrid,LabelfirstLabel,TextBoxsecondTextBox,TextBoxthirdTextBox){//注意如果你有一个行标题也在这里添加宽度。intnameRightLoc=grid.Location.X+grid.Columns[0].Width;intfpRightLoc=nameRightLoc+grid.Columns[0].DividerWidth+grid.Columns[1].Width;intdlRightLoc=fpRightLoc+grid.Columns[1].DividerWidth+grid.Columns[2].Width;点loc=firstLabel.Location;loc.X=nameRightLoc-firstLabel.Width-2;firstLabel.Location=loc;loc=secondTextBox.Location;loc.X=fpRightLoc-secondTextBox.Width-2;secondTextBox.Location=loc;loc=thirdTextBox.Location;loc.X=dlRightLoc-thirdTextBox.Width-2;thirdTextBox.Location=loc;}如果你的dgv在面板内部,那么你可以比较面板和dgv高度属性。如果dgv比面板大,那么必须有一个滚动条,对吗?比如:intpanel_height=pnl.Height;intdgv_height=(dgv.RowCount+1)*24;//你可以根据你的单元格样式使用这个24if(dgv_height>panel_height)MessageBox.Show("Voila!");将DGV最后一列的“AutoSizeMode”属性设置为“Fill”,并将TextBox的Width属性设置为dgv.Columns["lastcolumn"]。宽度。以上就是C#学习教程:如何检测DataGridView控件中的垂直滚动条。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: