标题可能太拗口了,我想在GUI里面放像Excel一样的表格,但是找不到(也不知道)怎么操作。所以采用了自绘控件组成表格的方案,简化后的模型如下:
自绘4个控件组成 2*2 的表格 (一个conbo A1 + 3个input B1 A2 B2)即:
A1 B1
A2 B2
此时,我无法通过键盘的“上下左右”方向键切换单元格,
例如,假设我现在光标定位在A1 那么,我按键盘的“→”是不会自动像Excle一样跳到 B1的,必须手动用鼠标来切换,效率非常不高
所以我想了用自定义快捷键的方式,给“上下左右”方向键都定义快捷键来重新定位光标。
但此时又带来了一个新的问题:
问题1:例如我点开combo控件(A1)的下拉列表后,本来按向下键,是可以进行列表项目的勾选的,但此时因为自定义了向下键,所以,无法进行列表的勾选,取而代之的是光标直接定位到了A2
问题2:例如假设B1 的内容为 ABCDEFG 并假设我现在光标的位置在G后面,然后我想把光标移动到F后面,正常操作是按一下键盘左键就可以向左移动1字符,但是由于左键现在被自定义了,所以又无法实现这个效果,按一下左键光标会跳到A1
所以不知道有没好的思路可以解决上述的困境,即:
1. 上下左右键 可以控制光标在四个控件里自由切换(foucs)
2. 实现1的同时,也不影响上下左右键对某一个具体控件的正常操作。#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 575, 303, 192, 114)
Global $input[4]
$input[0] = GUICtrlCreateCombo("", 56, 104, 193, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData($input[0],'111|222|3333|4444|5555',1)
$input[1] = GUICtrlCreateInput("ABCDEFG", 264, 104, 217, 21)
$input[2] = GUICtrlCreateInput("", 56, 136, 193, 21)
$input[3] = GUICtrlCreateInput("", 264, 136, 217, 21)
HotKeySet('{left}','move_left')
HotKeySet('{right}','move_right')
HotKeySet('{up}','move_up')
HotKeySet('{down}','move_down')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func move_left()
move(3)
EndFunc
Func move_right()
move(4)
EndFunc
Func move_up()
move(1)
EndFunc
Func move_down()
move(2)
EndFunc
Func move($move_i);移动光标
;$move_i 1上 2下 3左 4右
$temp = ControlGetFocus($Form1)
If StringLeft($temp,4) <> 'Edit' Then Return;没有聚焦
Local $temp_i = StringMid($temp,5)
Local $new_i = $temp_i ;新的单元格的位置
Switch $move_i
Case 1
If $new_i = 3 Or $new_i = 4 Then $new_i -= 2
Case 2
If $new_i = 1 Or $new_i = 2 Then $new_i += 2
Case 3
$new_i -=1
If $new_i = 0 Then $new_i = 1
Case 4
$new_i +=1
If $new_i = 5 Then $new_i = 4
EndSwitch
GUICtrlSetState($input[$new_i-1],$GUI_FOCUS)
EndFunc
|