乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 178|回复: 12

不允许 null 或 esc 或 enterkey 的最佳方法

[复制链接]

38

主题

1350

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1502
发表于 2007-8-8 12:30:38 | 显示全部楼层 |阅读模式
看起来如此简单的问题导致了一些有趣的错误陷阱。如果在没有有效输入的情况下按下enter键,我总是得到与以下内容不匹配的类型代码0]
我想的是尝试使用类似InitializeUserInput的东西来防止esc或空白输入键
有什么想法吗

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 12:39:53 | 显示全部楼层
我没有任何输入;但是我想知道这个小函数的功能是什么?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 13:53:06 | 显示全部楼层
从帮助文件中。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 15:25:11 | 显示全部楼层
马特,谢谢,但这些不是用于初始化输入的位吗?我正在尝试使用输入框,但找不到任何关于设置其使用位的文档
MJF该框的功能是放置在具有标高的块中的更大功能的一部分。我写了一个程序,用3d绘制一个变电站
  1. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  2. Public Sub AddPT()
  3.       Const VK_ESCAPE = &H1B
  4.       Const VK_LBUTTON = &H1
  5.       Const VK_SPACE = &H20
  6.       Const VK_RETURN = &HD
  7.       Const VK_LEFT = &H25
  8.       Dim inspt As Variant
  9.       Dim intOSMode As Integer
  10.       Dim dblRotation As Double
  11.       Dim objBlockRef As AcadBlockReference, dblTOC As Double
  12.       Dim varCancel As Variant, oCurrLayeR As AcadLayer
  13.       On Error GoTo Err_Control
  14.       Set oCurrLayeR = ThisDrawing.ActiveLayer
  15.       IsSetup
  16. Start:
  17.       dblTOC = CDbl(InputBox("What is T.O.C. elevation? ie 12 or 0 or -12"))
  18.       ThisDrawing.SetVariable "ORTHOMODE", 1
  19.       
  20.       intOSMode = ThisDrawing.GetVariable("OSMODE")
  21.       ThisDrawing.SetVariable "OSMODE", 32
  22.       inspt = ThisDrawing.Utility.GetPoint(, "Pick Insertion Point: ")
  23.       inspt(2) = inspt(2) + dblTOC
  24.       ThisDrawing.SetVariable "OSMODE", intOSMode
  25.       dblRotation = ThisDrawing.Utility.GetAngle(inspt, "Pick Front Side of PT: ")
  26.       Set objBlockRef = ThisDrawing.ModelSpace.InsertBlock(inspt, Path & "138kv-PT-ASSEMBLY.dwg", 1, 1, 1, dblRotation)
  27.       ThisDrawing.Regen acActiveViewport
  28. Exit_Here:
  29.       ThisDrawing.ActiveLayer = oCurrLayeR
  30.       ThisDrawing.SetVariable "OSMODE", intOSMode
  31.       ThisDrawing.SetVariable "INSUNITS", 1
  32.       Exit Sub
  33. Err_Control:
  34.       Select Case Err.Number
  35.       Case -2147352567
  36.       'Debug.Print Err.Number, Err.Description
  37.             varCancel = ThisDrawing.GetVariable("LASTPROMPT")
  38.             If InStr(1, varCancel, "*Cancel*")  0 Then
  39.                   If GetAsyncKeyState(VK_ESCAPE) And 8000 > 0 Then
  40.                         Err.Clear
  41.                         Resume Exit_Here
  42.                   ElseIf GetAsyncKeyState(VK_LBUTTON) > 0 Then
  43.                         Err.Clear
  44.                         Resume
  45.                   End If
  46.             Else
  47.                   If GetAsyncKeyState(VK_SPACE) Then
  48.                         Resume Exit_Here
  49.                   End If
  50.       'Missed the pick, send them back!
  51.                   Err.Clear
  52.                   Resume
  53.             End If
  54.             Case 13
  55.             GoTo Start
  56.       Case Else
  57.             MsgBox Err.Description
  58.             Resume Exit_Here
  59.       End Select
  60. End Sub

如您所见,这是一个基本功能,但我从未计划让我的用户不输入值。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 15:45:58 | 显示全部楼层
在快速搜索时,我发现了这些…也许其中一个会有帮助
http://www.dailydoseofexcel.com/archives/2005/05/04/1118/
这是一个很好的例子http://www.dicks-blog.com/archives/2004/05/26/validating-an-inputbox/
这是一个很好的例子http://www.vba-programmer.com/Snippets/Code_VB/InputBox_Cancel_vs_No_Input.html
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 15:48:55 | 显示全部楼层
最后一个看起来不错,但我有一个问题,我是否必须去掉我的on-error语句才能使其工作?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 15:53:24 | 显示全部楼层
我想不出任何理由你需要保留它。 如果按取消按钮或 esc,则会收到一条消息。 如果输入框为空,您将收到一条消息。 看起来所有的基地都被覆盖了。 除非我错过了什么??!?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 16:10:38 | 显示全部楼层
嗯,(我并不想成为一个PITA)但是如果我去掉err控件,如果用户在选择一个插入点时按ESC会发生什么?
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 16:11:36 | 显示全部楼层
Nevermind ^ 我可以使用 InitializeUserInput 让他们选择一个点
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-8 16:20:56 | 显示全部楼层
是的...你肯定需要某种错误控制来挑选点。我只是专注于输入框——抱歉。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 10:41 , Processed in 1.623849 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表