| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1767 人关注过本帖
标题:有什么办法可以使按钮事件返回值
只看楼主 加入收藏
心中有剑
Rank: 2
等 级:新手上路
威 望:5
帖 子:611
专家分:0
注 册:2007-5-18
收藏
得分:0 
  简单问题 有必要复杂化吗?都不晓得要实现什么呢?文本框 本身跟全局变量就没什么区别吧!

2007-08-20 08:36
jony
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-14
收藏
得分:0 

Private Sub cmd_lock_Click()
Dim Pwd As String
Dim i As Integer
Dim dir As Integer
For i = 1 To 4
MsgBox "加密可以防止其他用户对你填写的数据的修改,确定加密吗?", 32 + 1, "加密提示"
cycle: Pwd = InputBox("请输入密码:", "身份验证") //我以前描述的就是这个InputBox函数窗体中的输入区域(文本框)默认是明文显示的,我现在要用这个做密码验证需要密文(*号)显示,但这个函数好象做不到,所以想自己写个能返回输入的密码的窗体或控件。在程序中调用这个窗体然后根据该窗体返回的值判断程序流向。
If Pwd = "000" Then
Worksheets("Sheet1").Unprotect Password:=28465
Worksheets("Sheet1").Range("C4:D4").Locked = True
Worksheets("Sheet1").Range("F4:G4").Locked = True
tbx_llr.Enabled = False
tbx_notice.Enabled = False
Worksheets("Sheet1").Protect Password:=28465
MsgBox "加密已成功完成", 32 + 1, "加密提示"
Exit For
Else
dir = MsgBox("密码错误请重新输入", 16 + 1, "密码错误提示")
If dir = 2 Then
Exit Sub
End If
If i > 3 Then
MsgBox "超过最大密码错误次数(3次),你将没有权限对此文档加密!", 16 + 1, "密码错误提示"
Exit For
End If
i = i + 1
GoTo cycle
End If
Next i
End Sub

后来我自己做了一个返回密码的窗体,就是通过输入的值赋给一个全局变量,然后通过该全局变量来获得返回的值。
改进后的代码如下:
 .//省略部分跟上面代码一样
 .
 .
cycle: 身份验证.Show //此为自己做的返回密码窗体
If PWD = 系统登录验证.取指定用户密码(身份验证.tbx_uname) Then // PWD 是全局变量,"取指定用户密码"是标准模块"系统登录验证"的自定义函数,现在的问题是: 密码是可以返回了,就是程序执行完"身份验证.show"后就不再继续往下执行了,我分析原因是,程序执行完"身份验证"窗体的command_click()事件后,是不可能自己跳回本程序继续执行的.

 .
 .

各位大虾能指点一下吗?
谢谢!


日日行,不怕千万里;常常做,不怕千万事。永恒者专注
2007-08-21 00:32
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
身份验证.Show 1

快上课了……
2007-08-21 01:16
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
[转载]代码是转过来的……

早说要inputbox星号显示输入就直接说,干什么绕这么大圈子?

'InputBox使输入变为"*"的VB代码
'原帖地址:http://www.vbgood.com/viewthread.php?tid=58617
'
'以下代码放入标准模块中
Option Explicit

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Private Const EM_SETPASSWORDCHAR = &HCC

'hwnd 标识与定时器相关的窗口
'nIDEvent 指定一个非零定时器事件标识符
'uElapse 指定定时器事件之间的时间间隔
'lpTimerFunc 表示定时器事件发生后接收详细的函数的过程实例地址
Public Declare Function SetTimer Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) _
As Long

Private Declare Function KillTimer Lib "user32" _
(ByVal hwnd As Long, _
ByVal nIDEvent As Long) _
As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) _
As Long

Dim m_lngTimerId As Long


Public Sub
TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)

Dim lngHwnd As Long

lngHwnd = FindWindow(vbNullString, "输入框") '参数复制是Input的Title参数
lngHwnd = FindWindowEx(lngHwnd, 0, "Edit", vbNullString) '继续查找子窗口,使用TextBox类名"Edit"

If lngHwnd Then

Call PostMessage(lngHwnd, EM_SETPASSWORDCHAR, &H2A, 0) '&H2A是什么?就是*的AscII码42,这个参数为""就是不显示密码了。
Call KillTimer(0, m_lngTimerId) '关闭计时器

End If

End Sub


'调用代码演示:
Private Sub Command1_Click()
'建立API时间,句柄参数这里没有窗体赋值为0,但需要保存计时器标识符供KillTimer使用
m_lngTimerId = SetTimer(0, 0, 1, AddressOf TimerProc)

'Prompt作为对话框消息出现的字符串表达式。
'Title显示对话框标题栏中的字符串表达式。如果省略 title,则把应用程序名放入标题栏中。
'Default显示文本框中的字符串表达式,在没有其它输入时作为缺省值。如果省略 default,则文本框为空。
Dim InputStr As String
InputStr = InputBox$("请输入姓名", "输入框")
MsgBox InputStr
End
End Sub

[此贴子已经被作者于2007-8-21 1:38:50编辑过]


快上课了……
2007-08-21 01:36
jony
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-14
收藏
得分:0 
用版主的方法 是可以实现预定效果,在这里 先道声 谢谢!(包括所有跟贴的朋友),谢谢!

但还有个问题:
我是在EXCEL VBA里的一个表中要调用好几次inputbox做密码验证的,用上面方法
是可以实现* 号显示,但是我发现在第一次调用inputbox 后只要那个EXCEL工作簿
还在开着的情况下,那个计时器就不会自动随inputbox调用完关闭而关闭,而是一直
在运算的,消耗系统资源。能不能将 计时器在inputbox调用完后自动关闭吗,需要时在启动。
或 还有更好点的方法吗?


日日行,不怕千万里;常常做,不怕千万事。永恒者专注
2007-08-23 22:37
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
以下是引用jony在2007-8-23 22:37:19的发言:
用版主的方法 是可以实现预定效果,在这里 先道声 谢谢!(包括所有跟贴的朋友),谢谢!

但还有个问题:
我是在EXCEL VBA里的一个表中要调用好几次inputbox做密码验证的,用上面方法
是可以实现* 号显示,但是我发现在第一次调用inputbox 后只要那个EXCEL工作簿
还在开着的情况下,那个计时器就不会自动随inputbox调用完关闭而关闭,而是一直
在运算的,消耗系统资源。能不能将 计时器在inputbox调用完后自动关闭吗,需要时在启动。
或 还有更好点的方法吗?

那就在检测到InputBox被关闭就自动关闭计时器就行了。


VB QQ群:47715789
2007-08-23 23:50
jony
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-14
收藏
得分:0 
困惑

日日行,不怕千万里;常常做,不怕千万事。永恒者专注
2007-08-25 23:15
快速回复:有什么办法可以使按钮事件返回值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024765 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved