VB6中如何使MSHFlexGrid选中行反色显示?

  VB6中的MSHFlexGrid控件功能较强,在设置了BackColorSel以及ForeColorSel属性,并且允许整行选择时,被选中行就会按照设置的颜色完成反色显示效果,但是,当设置了允许行列合并时,此效果就失去了作用。那么,是不是鱼和熊掌不能兼得呢?
  不是的,今天在朋友小巧玲珑的帮助下,终于实现了“鱼和熊掌兼得”!现将实现之方法记录于此,同大家共享,并再次答谢小巧玲珑的热心帮助!

  一、实现的思路:
  1、设计时,先设置好MSHFlexGrid控件的BackColor、BackColorSel以及ForeColorSel属性,当然你也可以使用其默认颜色。设置其填充方式为1-Repeat,选择模式为1-By Row,焦点区域为0-None。
  2、当通过鼠标或者光标键选中某行时,先把它的背景色以及行号保存在变量中,以便此行不被选中时恢复。然后使用代码改变该行背景色以及前景色。当然,如果所有行的背景色及前景色是相同的,不用保存它们的背景色及前景色,恢复时恢复到你设置的统一默认值即可。
  3、把改变背景色及前景色的关键代码放进MSHFlexGrid控件的RowColChange()事件中。

  二、参考代码(将如下代码放在MSHFlexGrid控件的RowColChange()事件中):

Dim vRow As Long  '保存当前被选中行
With Me.MSHFlexGrid1
  vRow = .Row
  .Row = myRow  '上次被选中的行号,或初始设置的行号
  vCol = .Col
  .Col = 0
  .ColSel = .Cols - 1
  .CellBackColor = myRowBackColor  '上次被选中行的背景色,或初始设置行号相应的背景色
  .CellForeColor = .ForeColor              
  .Row = vRow
  myRowBackColor = .CellBackColor  '将当前被选中行背景色保存变量中
  .Col = 0
  .ColSel = .Cols - 1
  '设置被选中行按设置的反色方案显示背景色及前景色
  .CellBackColor = .BackColorSel
  .CellForeColor = .ForeColorSel
  myRow = .Row
End With

你可能感兴趣的:(vb)