VB程序员博客

VB程序开发

我好像从来不用哦我说的是大键盘右侧的那十几个键,以数字为主。数据库或EXCEL表格在录入大量数学时可能会用到,如会计录入某些数据用 如果是一连串数字 我就那个小键盘

如果偶尔输入数字 就不用了用。每次用支付宝缴水电费电话费账单的时候,都是用它来输入条码数字的。常用,笔记本没有小键盘是个小噩梦~<
跳劲舞 8键 非常常用~~~~
当然是用来输入数字了
小键盘可以盲打
主键盘上面一字排开的数字能盲打吗?

录入数字只需一只手,很快。(指法:将中指放在 5 上,食指、中指和无名指各管一行。加减回车用小指。)

可惜录入 16 进制数不好用。
主键盘上数字也能盲打,不过没有小键盘一只手来得方便。
操作软件时输入数量、金额、编码时经常要用到。
用内存工具修改游戏也经常要用到。

带来的后果就是用电话、ATM 时必须盯着键盘。常用常,特别是输卡号的时候。。。很常用一般输入密码之类的我们这边财务用得比较多.

还有很多经常数字录入工作的员工,用的不是笔记本,所以是大键盘,一般都习惯把鼠标放在左手用.常用小键盘.一般财务用得多,还有常用录入数字时比较多只有大批量录入数字时才用可以用 Alt + 小键盘数字 输入特殊字符。

我用的是智能陈桥,可用小键盘输入半角数字(即使设置是 五笔/全角)。

财会经常输入大量的数字,用小键盘输入快速方便。
我…..多年不用全键盘了….本本键盘打坏了一个,我说某些键不灵了,厂家直接免费换了一个…然后就比较小心地使用了,直到现在还完全良好,哈哈….小键盘还是大有用的必要的还是比较常用的,比如说输入密码时
小键盘用处大着呢
1:用来常规数字密码或其他长串数字的输入。
2:对搓拳皇必备工具(手柄除外)
3:魔兽争霸时物品栏对应着小键盘的78,45,12
4:在数字键失灵或失效时的救命草。
2:对搓拳皇必备工具(手柄除外)
//
好多年没对搓过了………….真怀念<
不太用<
输密码时,小键盘速度是大键盘上的3倍以上,我的CSDN密码在小键盘上2S就能输完这些速度无所谓——-再说我没小键盘,按FN切换出来又麻烦…


dim  sn  as string
sn="0125"
sn=cstr(sn+1)

结果sn=126
但是我要的结果是0126

那么如果sn="00125"呢,是不是要搞成"00000",变成5个0?

啊哈.慢了一步.

不慢,还没有搞定。我是不是还要判断字符串的长度,这样比较麻烦。搞个最优化的方案。

引用 2 楼 painus 的回复:
那么如果sn="00125"呢,是不是要搞成"00000",变成5个0?

聪明!


如何产生由数字和英文字母组成的随机序列号
比如:
1WDR45E5I
3R5JIRWWE3B33
4RTY464FERLJT8I

这样一个序列,主要是用在产品的序列号上,一个产品用一个序列号,长度固定或可变都可以,要能产生无数个随机序列号.请各位大侠帮帮忙,小弟VB只懂皮毛.

把你要出现的字母放入数组中,用RND得到数组下标。即可。
在调用   Rnd   之前,先使用无参数的   Randomize   语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。

为了生成某个范围内的随机整数,可使用以下公式:

Int((upperbound   -   lowerbound   +   1)   *   Rnd   +   lowerbound)

这里,upperbound   是随机数范围的上限,而   lowerbound   则是随机数范围的下限。

像这种号一般都没有O(噢)

Private   Sub   Command1_Click()
        Dim   s   As   String,   t   As   String
        Dim   i   As   Long,   nlen   As   String,   n   As   Long
        s   =   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "
        nlen   =   16   '计算16位长度的随机串
        For   i   =   1   To   nlen
                n   =   CLng(Rnd   *   35   +   1)
                t   =   t   &   Mid(s,   n,   1)
        Next
        Debug.Print   t
        Print   t
End   Sub

…………

关键还是要有好的随机生成规则

由yachong(蚜虫)   修改:
Private   Sub   Command1_Click()
        Dim   s   As   String,   t   As   String
        Dim   i   As   Long,   nlen   As   String,   n   As   Long
        Randomize
        s   =   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "
        nlen   =   16   '计算16位长度的随机串
        For   i   =   1   To   Rnd   *   35   +   1
                n   =   CLng(Rnd   *   35   +   1)
                t   =   t   &   Mid(s,   n,   1)
        Next
        Print   t
End   Sub

楼上的方法不错..

来转转

用日期序列+时间序列。。
DateSerial+TimeSerial

换个思路行不….?

序列号我直接使用顺序生成,不就行了….也就是生成流水号,像RMB一样

至于贴到你的产品上…….你的产品不会总是顺序卖出去吧??????

Option   Explicit

Private   Declare   Function   CoCreateGuid   Lib   "ole32.dll "   (pGuid   As   GUID)   As   Long
Private   Declare   Function   StringFromGUID2   Lib   "ole32.dll "   (pGuid   As   GUID,   ByVal   PointerToString   As   Long,   ByVal   MaxLength   As   Long)   As   Long
Private   Const   GUID_OK   As   Long   =   0
Private   Type   GUID
        Guid1   As   Long
        Guid2     As   Integer
        Guid3     As   Integer
        Guid4(0   To   7)   As   Byte
End   Type
Public   Function   CreateGUIDKey()   As   String
        Const   GUID_LENGTH   As   Long   =   38
        Dim   udtGUID   As   GUID
        Dim   strFormattedGUID   As   String
        Dim   lngResult   As   Long
        lngResult   =   CoCreateGuid(udtGUID)
        If   lngResult   =   GUID_OK   Then
                strFormattedGUID   =   String$(GUID_LENGTH,   0)
                StringFromGUID2   udtGUID,   StrPtr(strFormattedGUID),   GUID_LENGTH   +   1
        Else
                strFormattedGUID   =   " "
        End   If
        CreateGUIDKey   =   strFormattedGUID
End   Function

调用:
dim   code   as   string
code=CreateGUIDKey

code就是全球唯一序列号了,如果不要里面的“{”和“-”,自己替换成空即可。

好家伙,收藏了…….

嗯,收藏……..

昨天晚上还为了怎么生成uid犯难呢
呵呵,收藏

Mark

收藏

GUID  
MD5

mark

refer   to:
http://www.vbaccelerator.com/home/VB/Tips/Create_GUIDs/article.asp


如何产生由数字和英文字母组成的随机序列号
比如:
1WDR45E5I
3R5JIRWWE3B33
4RTY464FERLJT8I

这样一个序列,主要是用在产品的序列号上,一个产品用一个序列号,长度固定或可变都可以,要能产生无数个随机序列号.请各位大侠帮帮忙,小弟VB只懂皮毛.

把你要出现的字母放入数组中,用RND得到数组下标。即可。
在调用   Rnd   之前,先使用无参数的   Randomize   语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。

为了生成某个范围内的随机整数,可使用以下公式:

Int((upperbound   -   lowerbound   +   1)   *   Rnd   +   lowerbound)

这里,upperbound   是随机数范围的上限,而   lowerbound   则是随机数范围的下限。

像这种号一般都没有O(噢)

Private   Sub   Command1_Click()
        Dim   s   As   String,   t   As   String
        Dim   i   As   Long,   nlen   As   String,   n   As   Long
        s   =   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "
        nlen   =   16   '计算16位长度的随机串
        For   i   =   1   To   nlen
                n   =   CLng(Rnd   *   35   +   1)
                t   =   t   &   Mid(s,   n,   1)
        Next
        Debug.Print   t
        Print   t
End   Sub

…………

关键还是要有好的随机生成规则

由yachong(蚜虫)   修改:
Private   Sub   Command1_Click()
        Dim   s   As   String,   t   As   String
        Dim   i   As   Long,   nlen   As   String,   n   As   Long
        Randomize
        s   =   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "
        nlen   =   16   '计算16位长度的随机串
        For   i   =   1   To   Rnd   *   35   +   1
                n   =   CLng(Rnd   *   35   +   1)
                t   =   t   &   Mid(s,   n,   1)
        Next
        Print   t
End   Sub

楼上的方法不错..

来转转

用日期序列+时间序列。。
DateSerial+TimeSerial

换个思路行不….?

序列号我直接使用顺序生成,不就行了….也就是生成流水号,像RMB一样

至于贴到你的产品上…….你的产品不会总是顺序卖出去吧??????

Option   Explicit

Private   Declare   Function   CoCreateGuid   Lib   "ole32.dll "   (pGuid   As   GUID)   As   Long
Private   Declare   Function   StringFromGUID2   Lib   "ole32.dll "   (pGuid   As   GUID,   ByVal   PointerToString   As   Long,   ByVal   MaxLength   As   Long)   As   Long
Private   Const   GUID_OK   As   Long   =   0
Private   Type   GUID
        Guid1   As   Long
        Guid2     As   Integer
        Guid3     As   Integer
        Guid4(0   To   7)   As   Byte
End   Type
Public   Function   CreateGUIDKey()   As   String
        Const   GUID_LENGTH   As   Long   =   38
        Dim   udtGUID   As   GUID
        Dim   strFormattedGUID   As   String
        Dim   lngResult   As   Long
        lngResult   =   CoCreateGuid(udtGUID)
        If   lngResult   =   GUID_OK   Then
                strFormattedGUID   =   String$(GUID_LENGTH,   0)
                StringFromGUID2   udtGUID,   StrPtr(strFormattedGUID),   GUID_LENGTH   +   1
        Else
                strFormattedGUID   =   " "
        End   If
        CreateGUIDKey   =   strFormattedGUID
End   Function

调用:
dim   code   as   string
code=CreateGUIDKey

code就是全球唯一序列号了,如果不要里面的“{”和“-”,自己替换成空即可。

好家伙,收藏了…….

嗯,收藏……..

昨天晚上还为了怎么生成uid犯难呢
呵呵,收藏

Mark

收藏

GUID  
MD5

mark

refer   to:
http://www.vbaccelerator.com/home/VB/Tips/Create_GUIDs/article.asp


比如2004565874541254加下密

再到另一地方读取时再获得上面的值

看你要加密到什么程度。。。简单且无聊的加密:

s = "2004565874541254"
Debug.Print StrReverse(s)

你要字符串的还是字节流的?
你要压缩数据的还是增大数据的?
你要简单的还是复杂的?
你要原理还是原码?
……

最好自己写算法,加密和解密

楼主是不是想取得硬盘序列号或其它什么号,然后再设计注册机,这个好简单,当然我也只设计过简单的,不过听说这个没多大用,一下子就会被破解了,所以不用花太多精力和时间

解单点的吧,别算出来太长

加密字符串,把它算成有字母有数字的那种

谢谢了

MIME编码呀 然后单纯作字母作移位

最简单的应该就是二进制的与、或操作了。

1

原来结贴之后还可以跟帖啊~
了解~睡觉~


Sub ll()
  Dim aa(4)
  aa(0) = "1"
  aa(1) = "SS"
  aa(2) = "dd"
  aa(3) = "12.3333"
  aa(4) = "0.2033"
  For ii = 0 To UBound(aa)
    Select Case aa(ii)
      Case Is <= 1
      tt = Format(aa(ii), "0.0##")
      Case Is > 1, Is < 100
      tt = Format(aa(ii), "0.0#")
      Case Else
      tt = aa(ii)
    End Select
    Debug.Print tt
  Next ii
End Sub
输出结果
1.0
SS
dd
12.33
0.203
请教各位大侠的问题是
      Case Else
      tt = aa(ii)
    End Select
红色部分去掉后,结果与红色部分保留输出结果是等价的.

IS?

aa(0) = "1"
  aa(1) = "SS"
  aa(2) = "dd"
  aa(3) = "12.3333"
  aa(4) = "0.2033"
全是字串,Case Is <= 1
之类的条件?我就不要再说了吧

因为红色部分是永远执行不了,因为你没有>100。

引用 4 楼 huyongsc 的回复:
因为红色部分是永远执行不了,因为你没有>100。

试试
  Dim aa(4)
  aa(0) = "300"
  aa(1) = "SS"
  aa(2) = "dd"
  aa(3) = "121.3333"
  aa(4) = "0.2033"
  For ii = 0 To UBound(aa)
    Select Case aa(ii)
      Case Is <= 1
      tt = Format(aa(ii), "0.0##")
      Case Is > 1, Is < 100
      tt = Format(aa(ii), "0.0#")
      Case Else
      tt = aa(ii)
      End Select
    Debug.Print tt
  Next ii
End Sub

Private Sub Form_Load()
ll
End Sub
输出
300.0
SS
dd
121.33
0.203

因为红色部分是永远执行不了,因为你没有>100


Private Sub Command1_Click()
10 MsgBox "1"
20 MsgBox "2"
999 MsgBox "3"
56564665 MsgBox "4"
End Sub

像上面这段代码,行头为什么可以加数字啊? 加上这些数字有什么作用?

Private Sub Command1_Click()
GoTo 999
10 MsgBox "1"
20 MsgBox "2"
999 MsgBox "3"
56564665 MsgBox "4"
End Sub

是行标签

行号
好像很古老的BASIC用
这里还有一个自动添加行号的工具
http://www.vbkbase.com/Html/tools/VBControls/31020080908195057.html

谢谢各位了~~~~


要求:
1. 用usercontrol做三个对话框(分别可以输入年,月,日),能对入力的数字做验证,也就是只能输入数字,数字以外的东西输入不进去,输入的三个框中是分别是2008 01 01到2009 01 01以内的数字,如果不在这个范围内,要显示输入错误的信息。
这个我在form里面已经实现。写在usercontrol里面编译后拖到form里面usercontrol里面的代码怎么都没有了?
2. 点“表示”按钮的时候,label标签中显示刚刚输入的数字,如20080918
3. 用Timer和statusStrip控件实现在下面的状态框的左下角显示当前的时间
4. 按追加按钮,在数据集(dataset)中将ID和日期输入
5. 出力按下的时候,将数据集中的数据输出成一个XML格式的表格
对不起我好像只有20分了,希望高手给好好指点一下,因为自己刚刚学vb.net,对于工具怎么使用都不怎么会,所以请耐心的和我说一下,小弟不胜感激~~


DBF数据格式如下:
sn              data
AAA-1            122
AAA-2            222
AAA-3            221
AAA-10            11
AAA-11            22
AAA-13            44
AAA-21            77
————————-
需查找sn列中去掉“AAA-”后的数字大于10的sn,data列。
请问SQL语句如何写?

如果sql = "select sn,data from tableName where sn>'AAA-10' order by sn"
貌似会AAA-2 > AAA-10
可我要求的的是AAA-10  >  AAA-2

DBF没用过,不知道相关函数,比如ACCESS可以:

sql = "select sn,data from tableName where clng(mid(sn,5))>10 order by clng(mid(sn,5)"
如果AAA-不是固定的,可用一下instr

sql = "select sn,data from tableName where sn>'AAA-10' and length(sn)>5 order by sn"

access
SELECT sn, data from mytable where clng(mid(sn,5,len(sn)-4))>10


例如:543.78元
我想得到的为伍百肆拾三元柒毛八分哦

Private   Function   dfNumberToBig(ByVal   strN   As   String)   As   String
        Select   Case   strN
                Case   "0 "
                        dfNumberToBig   =   "零 "
                Case   "1 "
                        dfNumberToBig   =   "壹 "
                Case   "2 "
                        dfNumberToBig   =   "贰 "
                Case   "3 "
                        dfNumberToBig   =   "叁 "
                Case   "4 "
                        dfNumberToBig   =   "肆 "
                Case   "5 "
                        dfNumberToBig   =   "伍 "
                Case   "6 "
                        dfNumberToBig   =   "陆 "
                Case   "7 "
                        dfNumberToBig   =   "柒 "
                Case   "8 "
                        dfNumberToBig   =   "捌 "
                Case   "9 "
                        dfNumberToBig   =   "玖 "
        End   Select
End   Function

谢谢楼上的兄弟拉

请问还有什么好的方法不?

源代码都有了,复制下来用不就行了,这不都是现成的了吗?

谢谢microtry了  
我没看懂上面的代码哦。。

能加点注释不啊。。

万分感谢。。。。

同一种程序有很多写法,上面那个算法写得有点麻烦了。等我给你一个简练点的。

建立一个模块,将下面的代码拷贝的模块里。
注意:暂时没实现下面两个功能。
1、零百零十零万的缩位。
2、没有超出长度的处理,超过预期数字长度将导致程序崩溃。如果你把它用在商业用途,一定要小心这个现象。

函数叫ChinaNumericGet,参数是一个Double值。你只要“金额=ChinaNumericGet(数字)”就可以了。至于这个程序具体的原理如果详细说起来比较多,大致就是一个查表法。
我写程序不喜欢用Select和If   Then,因为太麻烦,不容易扩展。
如果你把conBitNameTable的值改为“头十百千万十百千亿十百千万十百千兆十百千万十百千亿十百千万十百千”;把Format(pValue,   "#.00 ")改成Format(pValue,   "# ")。则可以用来给养猪场清点大肥猪。
^_^

Const   conBitNameTable   As   String   =   "分角元十百千万十百千亿十百千万十百千兆十百千万十百千亿十百千万十百千 "
Const   conNumericTable   As   String   =   "零壹贰叁肆伍陆柒捌玖 "

Public   Function   ChinaNumericGet(ByVal   pValue   As   Double)   As   String
    Dim   tOutStr   As   String
   
    Dim   tValueStr   As   String
    Dim   tValueBits()   As   Byte
    Dim   tValueBitsLen   As   Long
    Dim   tValueBitsIndex   As   Long
   
    tValueStr   =   Format(pValue,   "#.00 ")
    tValueStr   =   Replace(tValueStr,   ". ",   " ")
    tValueBits()   =   StrConv(tValueStr,   vbFromUnicode)
    tValueBitsLen   =   UBound(tValueBits())
   
    Dim   tValueBitsLenCheck   As   Boolean
   
    tValueBitsLenCheck   =   tValueBitsLen   >   (Len(conBitNameTable)   -   1)
   
    Dim   tBitStr   As   String
    Dim   tBitIndex   As   Long
   
    For   tValueBitsIndex   =   tValueBitsLen   To   0   Step   -1
        tBitStr   =   Mid(conNumericTable,   tValueBits(tValueBitsIndex)   -   47,   1)
        tBitIndex   =   tValueBitsLen   -   tValueBitsIndex   +   1
        tBitStr   =   tBitStr   &   Mid(conBitNameTable,   tBitIndex,   1)
        tOutStr   =   tBitStr   &   tOutStr
    Next
   
    ChinaNumericGet   =   tOutStr
End   Function

下面是程序的实际运行结果。

输入:1233456789.123
输出:壹十贰亿叁千叁百肆十伍万陆千柒百捌十玖元壹角贰分

输入:1000000000.123
输出:壹十零亿零千零百零十零万零千零百零十零元壹角贰分

楼上的妹妹,程序要给别人用首先确保你的代码是自完备的,否则会导致别人的代码甚至项目崩溃,我的代码7年前写的,虽然不够完美,但至少是安全的代码和没有错误的代码
举个例子:
执行你的代码:Text1.Text   =   ChinaNumericGet( "abc ")
结果崩溃:实时错误‘13’类型不匹配
执行我的代码:Text1.Text   =   dfTransToBig( "abc   ")
结果:空字符串

其次您的计算结果好象有误啊:
再举个例子
输入:1000050000.123
ChinaNumericGet输出:壹十零亿零千零百零十伍万零千零百零十零元壹角贰分
dfTransToBig输出:壹拾亿伍万圆壹角贰分(这里不需要读出零)
十亿五千万被你转换成“壹十零亿零千零百零十伍万……”
包括你举的1000000000.123的结果,读都读不通

在举个关于读零的例子
输入1005.123
ChinaNumericGet输出:壹千零百零十伍元壹角贰分(还是读不通)
dfTransToBig输出:壹仟零伍圆壹角贰分(这里只读一次零)

顺便说一句,你的“十”应该是“拾”,当然这倒是小问题了
解决这个问题是要求你具备一些基本数学和财务知识的

关注,小鲜美很长时间没来VB版了啊,呵呵

写法的确许多。读法要看楼主具体要求了。

也给贴个示例,如果要向microtry(米醋)那样的读法,可以用replace进一步格式化

  Function   GetRMB(dMoney   As   Currency)   As   String
 
        Dim   sMoney   As   String
        Dim   sGetRMB   As   String
        Dim   sPos   As   Variant
        Dim   i   As   Integer,   j   As   Integer
       
        '格式化
        sMoney   =   Format(dMoney,   "##0.00 ")
        '用中文替换阿拉伯数字并去掉小数点
        sMoney   =   Replace(sMoney,   "0 ",   "零 ")
        sMoney   =   Replace(sMoney,   "1 ",   "壹 ")
        sMoney   =   Replace(sMoney,   "2 ",   "贰 ")
        sMoney   =   Replace(sMoney,   "3 ",   "叁 ")
        sMoney   =   Replace(sMoney,   "4 ",   "肆 ")
        sMoney   =   Replace(sMoney,   "5 ",   "伍 ")
        sMoney   =   Replace(sMoney,   "6 ",   "陆 ")
        sMoney   =   Replace(sMoney,   "7 ",   "柒 ")
        sMoney   =   Replace(sMoney,   "8 ",   "捌 ")
        sMoney   =   Replace(sMoney,   "9 ",   "玖 ")
        sMoney   =   Replace(sMoney,   ". ",   vbNullString)
       
        '从字符串的最后一位开始向前插入相应的单位
        sGetRMB   =   "整 "
        sPos   =   Array( "分 ",   "角 ",   "元 ",   "拾 ",   "佰 ",   "仟 ",   "万 ",   "拾 ",   "佰 ",   "仟 ",   "亿 ",   "拾 ",   "佰 ",   "仟 ",   "万 ",   "兆 ")
       
        For   i   =   Len(sMoney)   To   1   Step   -1
                sGetRMB   =   Mid(sMoney,   i,   1)   &   sPos(j)   &   sGetRMB
                j   =   j   +   1
        Next

        If   dMoney   <   0   Then   sGetRMB   =   "负 "   &   sGetRMB
        GetRMB   =   sGetRMB
   
End   Function

我的代码只是阐述一种算法,而不是给他用的。既然这样说的话,我就给一个完整的代码好了。

谢谢楼上的大哥大姐了。。

good