如何实现 不用按住ctrl键来实现按住ctrl键进行选择的效果,100分

lb410 2003-10-09 02:01:30
我想在一个有网格的控件上实现这么一种操作:
单击一行数据,选中本行,再单击另外一行,选中另一行;如果单击一个已经选中的行,则选中的行就可以取消选中。其实就是不用按住ctrl键实现按住ctrl键的效果。

本来在listBox中可以实现这种操作,但是listBox中没有网格的形状,所以只好考虑其它的方法了(这个实现的方法是在单击listBox时,使用sendKeys发送ctr键)

请问这个该如何实现呢?
或者有做好的控件也可以
谢谢了!!!
...全文
297 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yijiansong 2003-10-09
  • 打赏
  • 举报
回复
up一下
射天狼 2003-10-09
  • 打赏
  • 举报
回复
Option Explicit

Dim bolFlag As Boolean, lngRow As Long

Private Sub Form_Load()
'设置ListView1控件的查看方式为:3
'设置整行选择属性
'设置网络行

Dim i As Long
Dim lvItem As ListItem

For i = 1 To 5
Set lvItem = ListView1.ListItems.Add(, , "姓名")
lvItem.ListSubItems.Add , , "性别"
Next
End Sub

Private Sub ListView1_Click()
bolFlag = Not bolFlag
If lngRow = ListView1.SelectedItem.Index Then ListView1.SelectedItem.Selected = bolFlag
lngRow = ListView1.SelectedItem.Index
End Sub

修改一下,这回没问题了~~
射天狼 2003-10-09
  • 打赏
  • 举报
回复
你试一下吧,我试过了,完全可以达到你说的效果~~
射天狼 2003-10-09
  • 打赏
  • 举报
回复
可以用LISTVIEW控件

Option Explicit

Dim bolFlag As Boolean

Private Sub Form_Load()
'设置ListView1控件的查看方式为:3
'设置整行选择属性
'设置网络行

Dim i As Long
Dim lvItem As ListItem

For i = 1 To 10
Set lvItem = ListView1.ListItems.Add(, , "姓名")
lvItem.ListSubItems.Add , , "性别"
Next
End Sub

Private Sub ListView1_Click()
bolFlag = Not bolFlag
ListView1.SelectedItem.Selected = bolFlag
End Sub
GetWindowPos 2003-10-09
  • 打赏
  • 举报
回复
按键 代码
BACKSPACE {BACKSPACE}, {BS}, 或 {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} 或 {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}或 ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} 或 {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}


为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下:

按键 代码
SHIFT +
CTRL ^
ALT %


为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键,请使用 "+(EC)"。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 "+EC"。

为了指定重复键,使用 {key number} 的形式。必须在 key 与 number 之间放置一个空格。例如,{LEFT 42} 意指 42 次按下 LEFT ARROW 键;{h 10} 则是指 10 次按下 H 键。

注意 不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows 中运行。Sendkeys 也无法将 PRINT SCREEN 按键 {PRTSC} 发送到任何应用程序。
SendKeys 语句示例
本示例使用 Shell 函数来运行 Microsoft Windows 所附的计算器程序;然后使用 SendKeys 语句来按下计算器的某些数字键,最后退出计算器。(若要观察示例运行过程,可将示例粘贴到过程中,再运行过程即可。因为 AppActivate 会将焦点转移到计算器应用程序,故本示例不能以单步方式来运行。)。

Dim ReturnValue, I
ReturnValue = Shell("Calc.EXE", 1) ' 运行计算器。
AppActivate ReturnValue ' 激活计算器。
For I = 1 To 100 ' 设置计数循环。
SendKeys I & "{+}", True ' 按下按键给计算器
Next I ' 将所有 I 值相加。
SendKeys "=", True ' 取得总合。
SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器。


照搬的东西不值钱

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧