lrbin50 发表于 2009-9-14 17:21:25

两个INPUT框如何同步?

本帖最后由 lrbin50 于 2009-9-15 10:54 编辑

如题,有两个INPUT框,INPUT1,INPUT2。我想在INPUT1框输入内容的同时,INPUT2框也同步显示输入的内容!请问如何做到?(同理,我想在INPUT1输入新内容时,更改COMBO中的内容如何做到。注意,当INPUT1获得焦点是不改变COMBO的值,当输入了任意字符时就改变COMBO的值)

水木子 发表于 2009-9-14 19:11:41

本帖最后由 水木子 于 2009-9-14 19:12 编辑

呵呵!是这样吗?(超级傻瓜式):face (33):#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 300, 300, -1, -1)
$Input1 = GUICtrlCreateInput("", 80, 50, 150, 21)
$Input2 = GUICtrlCreateInput("", 80, 100, 150, 21)
GUISetState(@SW_SHOW)
AdlibEnable("yun", 100)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

Func yun()
        $a = GUICtrlRead($Input1)
        GUICtrlSetData($Input2,$a)
EndFunc

水木子 发表于 2009-9-14 19:45:53

呵呵!前辈不要逗我啦!我那太土了。
抛砖引玉,还望前辈指教啊!

lrbin50 发表于 2009-9-14 20:06:42

本帖最后由 lrbin50 于 2009-9-14 20:10 编辑

2楼的不错,可以解决问题,但这样的话,会不会程序占用太大,每隔100毫秒就要运行一次yun()函数。能不能有在Input1产生事件后才运行这个yun()函数,事件结束后(input1失去焦点后)就不运行了。希望高手来改进一下写法。

afan 发表于 2009-9-14 20:15:37

哪有土不土啊,达到目的、代码简单不就最好了,呵呵~ 我能想到的和你一样,要不就加在循环里,也差不多

五猫橙 发表于 2009-9-14 20:36:05

我也是这样想的...

yejier 发表于 2009-9-14 20:41:35

写成事件模式 不知道行不行
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=Form1.kxf
$Form1 = GUICreate("Form1", 374, 263, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 96, 32, 161, 21)
$Input2 = GUICtrlCreateInput("Input2", 96, 80, 161, 21)
$Button1 = GUICtrlCreateButton("close", 128, 152, 57, 25)
GUICtrlSetOnEvent(-1, "Button1Click")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        Sleep(100)
        $a = GUICtrlRead($Input1)
    GUICtrlSetData($Input2,$a)

WEnd

Func Button1Click()
    Exit
EndFunc

afan 发表于 2009-9-14 20:47:26

7# yejier


一样的可以~

水木子 发表于 2009-9-14 20:56:02

本帖最后由 水木子 于 2009-9-14 20:59 编辑

7# yejier


是啊!始终还是一开始就循环,4楼的意思好像是通过输入焦点来判断是否循环。

afan 发表于 2009-9-14 21:02:16

这个sleep没什么cpu占用,改成1毫秒cpu占用都几乎没啥区别

水木子 发表于 2009-9-14 21:03:53

这个sleep没什么cpu占用,改成1毫秒cpu占用都几乎没啥区别
afan 发表于 2009-9-14 21:02 http://www.autoitx.com/images/common/back.gif
嗯!就是。:face (31):

pusofalse 发表于 2009-9-14 21:09:04

最高效并且占用资源最少的写法应该还是注册WM_COMMAND消息,但代码会难懂了。

lrbin50 发表于 2009-9-14 21:29:46

哦,楼上的大侠能不能弄一个代码来看看,尽量学吧,实在学不懂就用笨办法。唉。

afan 发表于 2009-9-14 22:06:33

不知道pusofalse 大虾是不是这个意思:#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 300, 300)
$Input1 = GUICtrlCreateInput("", 80, 50, 150, 21)
$Input2 = GUICtrlCreateInput("", 80, 100, 150, 21)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case - 3
                        Exit

        EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        Switch $ilParam
                Case GUICtrlGetHandle($Input1)
                        GUICtrlSetData($Input2, GUICtrlRead($Input1))
                Case GUICtrlGetHandle($Input2)
                        GUICtrlSetData($Input1, GUICtrlRead($Input2))
        EndSwitch
EndFunc   ;==>WM_COMMAND

netegg 发表于 2009-9-14 22:11:36

应该是,类似hover状态的处理
页: [1] 2
查看完整版本: 两个INPUT框如何同步?