zoukankan      html  css  js  c++  java
  • DevExpress GridView 鼠标悬停颜色追踪(行或单元格)

    DevExpress GridView 鼠标悬停颜色追踪(行或单元格)

    2019年07月12日 15:17:02 涛神-Dev 阅读数 41 标签: GridView行追踪单元格追踪 更多

    个人分类: DevExpressWinformGridControl

    如何将GridView做成类似网页的列表那样,鼠标移动的是行背景颜色跟着变,也就是所为的鼠标悬停追踪,

    效果如下:

    代码如下:

    
     
    1. public class ViewStyleHelper

    2. {

    3. bool enable;

    4. public bool Enable

    5. {

    6. get { return enable; }

    7. set

    8. {

    9. enable = value;

    10. UnRegisterEvent();

    11. if (enable)

    12. {

    13. RegisterEvent();

    14. }

    15. else

    16. {

    17.  
    18. View.RefreshData();

    19. }

    20. }

    21. }

    22. bool byRow;

    23. /// <summary>

    24. /// 真为行,假为单元格

    25. /// </summary>

    26. public bool ByRow

    27. {

    28. get { return byRow; }

    29. set

    30. {

    31. byRow = value;

    32. UnRegisterEvent();

    33. if(enable)

    34. RegisterEvent();

    35. }

    36. }

    37. public DevExpress.XtraGrid.Views.Grid.GridView View { get; private set; }

    38. /// <summary>

    39. /// 当前列

    40. /// </summary>

    41. GridColumn currentCol;

    42. /// <summary>

    43. /// 当前行

    44. /// </summary>

    45. int currentRowHandle;

    46. public ViewStyleHelper(DevExpress.XtraGrid.Views.Grid.GridView view,bool byRow=true)

    47. {

    48. View = view;

    49. this.byRow = byRow;

    50. Enable = true;

    51. view.MouseLeave += (s, e) =>

    52. {

    53. currentCol = null;

    54. currentRowHandle = int.MinValue;

    55. view.RefreshData();

    56. };

    57. }

    58. void RegisterEvent()

    59. {

    60. View.MouseMove += OnMouseMove;

    61. if (!byRow)

    62. View.RowCellStyle += OnRowCellStyle;

    63. else

    64. {

    65. View.RowStyle += OnRowStyle;

    66. }

    67. }

    68. void UnRegisterEvent()

    69. {

    70. View.MouseMove -= OnMouseMove;

    71. View.RowCellStyle -= OnRowCellStyle;

    72. View.RowStyle -= OnRowStyle;

    73. }

    74. private void OnMouseMove(object sender, MouseEventArgs e)

    75. {

    76. var view = sender as DevExpress.XtraGrid.Views.Grid.GridView;

    77. var info = view.CalcHitInfo(e.Location);

    78. bool refresh = false;

    79. if (currentCol != info.Column || currentRowHandle != info.RowHandle)

    80. {

    81. refresh = true;

    82. }

    83. if (info.InDataRow)

    84. {

    85. currentCol = info.Column;

    86. currentRowHandle = info.RowHandle;

    87. }

    88. else

    89. {

    90. currentCol = null;

    91. currentRowHandle = int.MinValue;

    92. }

    93. if (refresh)

    94. view.RefreshData();

    95. }

    96. private void OnRowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)

    97. {

    98. if (e.RowHandle == currentRowHandle)

    99. {

    100. e.Appearance.BackColor = Color.FromArgb(108, 178, 235);

    101. e.HighPriority = true;

    102. }

    103.  
    104. }

    105. private void OnRowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)

    106. {

    107. if (e.Column == currentCol && e.RowHandle == currentRowHandle)

    108. {

    109. e.Appearance.BackColor = Color.FromArgb(108, 178, 235);

    110. }

    111.  
    112. }

    113. }

    调用代码:

    
     
    1. ViewStyleHelper helper;

    2. private void Form1_Load(object sender, EventArgs e)

    3. {

    4. helper = new ViewStyleHelper(gridView1);

    5. var dt = CreateDt();

    6. gridControl1.DataSource = dt;

    7. }

  • 相关阅读:
    sqlite学习笔记9:C语言中使用sqlite之插入数据
    基于对话框的应用程序,点击button打开一个网页
    数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用
    BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍
    ARP缓存记录种类动态条目和静态条目
    ArduinoYun的电源插座
    Xamarin开发Anroid应用介绍
    学习NGUI前的准备NGUI的相关信息
    Xamarin Android开发实战(上册)大学霸内部资料
    NGUI全面实践教程(大学霸内部资料)
  • 原文地址:https://www.cnblogs.com/grj001/p/12224756.html
Copyright © 2011-2022 走看看