找回密码
 加入
搜索
查看: 3767|回复: 25

两个INPUT框如何同步?

[复制链接]
发表于 2009-9-14 17:21:25 | 显示全部楼层 |阅读模式
本帖最后由 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 编辑

呵呵!是这样吗?(超级傻瓜式)
#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

评分

参与人数 1金钱 +20 贡献 +10 收起 理由
afan + 20 + 10

查看全部评分

发表于 2009-9-14 19:45:53 | 显示全部楼层
呵呵!前辈不要逗我啦!我那太土了。
抛砖引玉,还望前辈指教啊!
 楼主| 发表于 2009-9-14 20:06:42 | 显示全部楼层
本帖最后由 lrbin50 于 2009-9-14 20:10 编辑

2楼的不错,可以解决问题,但这样的话,会不会程序占用太大,每隔100毫秒就要运行一次yun()函数。能不能有在Input1产生事件后才运行这个yun()函数,事件结束后(input1失去焦点后)就不运行了。希望高手来改进一下写法。
发表于 2009-9-14 20:15:37 | 显示全部楼层
哪有土不土啊,达到目的、代码简单不就最好了,呵呵~ 我能想到的和你一样,要不就加在循环里,也差不多
发表于 2009-9-14 20:36:05 | 显示全部楼层
我也是这样想的...
发表于 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
发表于 2009-9-14 20:47:26 | 显示全部楼层
7# yejier


一样的可以~
发表于 2009-9-14 20:56:02 | 显示全部楼层
本帖最后由 水木子 于 2009-9-14 20:59 编辑

7# yejier


是啊!始终还是一开始就循环,4楼的意思好像是通过输入焦点来判断是否循环。
发表于 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

嗯!就是。
发表于 2009-9-14 21:09:04 | 显示全部楼层
最高效并且占用资源最少的写法应该还是注册WM_COMMAND消息,但代码会难懂了。

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
afan + 10 + 5

查看全部评分

 楼主| 发表于 2009-9-14 21:29:46 | 显示全部楼层
哦,楼上的大侠能不能弄一个代码来看看,尽量学吧,实在学不懂就用笨办法。唉。
发表于 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

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
pusofalse + 20 + 5

查看全部评分

发表于 2009-9-14 22:11:36 | 显示全部楼层
应该是,类似hover状态的处理
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 12:25 , Processed in 0.086919 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表