顺序号难道不是为了展示例子用? 如果实际顺序号不改变为何要和可变的控件弄成一个,直接创建一列固定的 ...
afan描述问题很准确,看来问题解决后,标题要改成“如何实现两个控件上下互换位置”,现我正在研究,多谢指教。 既然是相同类型的一组控件,为何要改变控件的位置,互换控件的内容不可以吗? tubaba 发表于 2019-7-31 10:20
既然是相同类型的一组控件,为何要改变控件的位置,互换控件的内容不可以吗?
不知道LZ会否有其它需求,比如某行使用了不同的颜色或样式,所以移动相对来说可拓展性更好。
如无其它需求,互换内容也可以达到同样的效果~ 代码量无差别,看自己的习惯了 本帖最后由 dnvplj 于 2019-7-31 10:52 编辑
afan 发表于 2019-7-31 10:29
不知道LZ会否有其它需求,比如某行使用了不同的颜色或样式,所以移动相对来说可拓展性更好。
如无其它需 ...
那太好了,给afan添麻烦了。另外,配置文件是不是有必要,因加个添加按钮就可以了,刚想到的。 dnvplj 发表于 2019-7-31 10:45
那太好了,给afan添麻烦了。另外,配置文件是不是有必要,因加个添加按钮就可以了,刚想到的。
也可以这样玩。
本帖最后由 dnvplj 于 2019-7-31 21:21 编辑
tubaba 发表于 2019-7-31 10:20
既然是相同类型的一组控件,为何要改变控件的位置,互换控件的内容不可以吗?
“互换控件的内容”的思路非常正确,因还有其他动作,如运行所添加的程序,也需要排序等,但不知怎么去写。 dnvplj 发表于 2019-7-31 10:45
那太好了,给afan添麻烦了。另外,配置文件是不是有必要,因加个添加按钮就可以了,刚想到的。
不知道你的功能目的,无法给出建议,不过一般情况下如有保存数据的必要,则通常使用配置文件,写注册表之类的易出问题不推荐 afan 发表于 2019-8-2 19:45
不知道你的功能目的,无法给出建议,不过一般情况下如有保存数据的必要,则通常使用配置文件,写注册表之 ...
非常感谢afan大的在次回复,不保留数据,只想要您13楼的效果就可以了,到现在我也没研究出来。如果是2个就好办,这一多真就不会了,还望afan大指教。 dnvplj 发表于 2019-8-2 19:54
非常感谢afan大的在次回复,不保留数据,只想要您13楼的效果就可以了,到现在我也没研究出来。如果是2个 ...
Global $iSpacingY = 40
Global $ini = @ScriptDir & '\123.ini'
Global $Form1 = GUICreate('控件上下移动', 500, 340)
Global $aILabel1 = _Label_Lst()
Local $ILabel = _Label_DU()
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $ILabel - 9 To $ILabel
$iX = ($nMsg - 13) / 2 + 1
If IsInt($iX) Then
_Move($iX, 'down')
Else
_Move(Floor($iX), 'up')
EndIf
EndSwitch
WEnd
Func _Label_Lst()
Local $Label
For $ii = 1 To UBound($Label) - 1
GUICtrlCreateLabel(StringFormat('%02s.', $ii), 30, $iSpacingY * $ii + 20, 15, 20, 0x200)
GUICtrlSetColor(-1, 0x6622DD)
$Label[$ii] = GUICtrlCreateLabel(IniRead($ini, $ii, 'Name', ''), 50, $iSpacingY * $ii + 20, 160, 20, 0x200)
Next
Return $Label
EndFunc ;==>_Label_Lst
Func _Label_DU()
Local $id
For $ii = 1 To 5
GUICtrlCreateLabel('↓', 400, $iSpacingY * $ii + 20, 20, 20, 0x200)
GUICtrlSetBkColor(-1, 0xfce6c9)
$id = GUICtrlCreateLabel('↑', 422, $iSpacingY * $ii + 20, 20, 20, 0x200)
GUICtrlSetBkColor(-1, 0xfce6c9)
Next
GUICtrlSetState($id - 1, 128)
GUICtrlSetState($id - 8, 128)
Return $id
EndFunc ;==>_Label_DU
Func _Move($iX, $sdirection)
Local $aCP = ControlGetPos($Form1, '', $aILabel1[$iX])
If $sdirection = 'down' Then
Local $iX1 = $iX + 1
Else
Local $iX1 = $iX - 1
EndIf
Local $aCP1 = ControlGetPos($Form1, '', $aILabel1[$iX1])
GUICtrlSetPos($aILabel1[$iX], $aCP1, $aCP1)
GUICtrlSetPos($aILabel1[$iX1], $aCP, $aCP)
Local $iTmp = $aILabel1[$iX]
$aILabel1[$iX] = $aILabel1[$iX1]
$aILabel1[$iX1] = $iTmp
EndFunc ;==>_Move afan 发表于 2019-8-2 19:59
非常感谢afan大,暂时还看不明白,我在学习学习。 本帖最后由 xyx115 于 2019-8-5 15:58 编辑
dnvplj 发表于 2019-7-30 23:09
应是2个控件互换位置(加和减),但还要改写配置文件,不然读取出来的信息还是原来的位置,还真有点难。
天空飘来五个字,这都不是事
页:
1
[2]