我在编写代码时遇到问题。我有一张表格列出了工作人员的详细信息。当您选择一条记录并右键单击时,我试图将电子邮件地址复制到剪贴板。我有以下代码:
#include <GUIConstantsEx.au3>
#include <mssql.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <AutoItConstants.au3>
global $title = "E-Mail address lookup"
global $name = InputBox($title,"Please type the name of the person you wish to find")
global $sqlCon = _MSSQL_Con("server", "username", "password", "directory-plus")
global $result = _MSSQL_GetRecord($sqlCon, "autoit_view","*", "WHERE cn LIKE '%" & StringStripWS($name,3) & "%'")
if StringLen(StringStripWS($name,3)) < 1 then
MsgBox(0, $title, "Name cannot be empty")
Else
Global $rset = UBound($result) - 1
Global $ControlID = GUICreate($title, 500, 150)
Global $idListview = GUICtrlCreateListView("Deparment|E-Mail Address|Name|Telephone Number", 10, 10, 480, 150)
for $count = 1 to $rset step 1
GUICtrlCreateListViewItem($result[$count][0] & "|" & $result[$count][2] & "|" & $result[$count][1] & "|" & $result[$count][2], $idListview)
if MouseClick($MOUSE_CLICK_RIGHT)==1 Then
ClipPut($result[$count][2])
EndIf
Next
GUISetState(@SW_SHOW)
GUISetState()
While 1
Global $Msg = GUIGetMsg()
Switch $Msg
Case -3, $ControlID
Exit
EndSwitch
WEnd
EndIf
我原以为我在for循环中的IF语句可以解决这个问题但是,当我运行我的代码时,它只是复制最后一行中电子邮件地址列中的任何内容,而实际上我希望它复制电子邮件地址当你右键点击某一行但我不确定该怎么做时。
答案 0 :(得分:1)
您的代码有两个主要问题。第一个是MouseClick()不检查是否按下了鼠标按钮,而是发送鼠标按钮单击。由于发送鼠标按钮单击将成功,MouseClick($ MOUSE_CLICK_RIGHT)== 1将评估为true。对于您创建的每个列表视图项,您将把电子邮件地址放在剪贴板上。
第二个问题是if语句位于错误的位置。它是在您创建每个列表视图项后执行的。
相反,请按如下所示更改您的While语句
While 1
Global $Msg = GUIGetMsg()
Switch $Msg
Case -3, $ControlID
Exit
case $GUI_EVENT_SECONDARYDOWN
$selecteditem=StringSplit(GUICtrlRead(GUICtrlRead($idListview)),"|")
if @error=0 and $selecteditem[0]>1 Then
ClipPut($selecteditem[2])
EndIf
EndSwitch
WEnd