有问题~

Home Home
引用 | 编辑 v52186
2007-06-15 16:31
楼主
推文 x0
想问一个程式写法~拜托了...新手
今天上课的,全班都不会,老师说下次会考...

大致上说明一下

程式是VB2005

一个视窗上面
一个Label1和一个TextBox1
Label1要随机产生一个英文(A~Z...这我会ok!)

TextBox1输入英文时
如果 ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 GNUGCC
2007-06-15 21:44
1楼
  
你可能要在 TextBox1 的 KeyPress 事件去侦测输入按键的值是否和 Label1 的 Caption 属性代表的值相同,而且是要每按键一次就侦测一次必竟你只判断一个英文字

自已写看看吧...

献花 x0
引用 | 编辑 v52186
2007-06-15 22:46
2楼
  
下面是引用GNUGCC于2007-06-15 21:44发表的 :
你可能要在 TextBox1 的 KeyPress 事件去侦测输入按键的值是否和 Label1 的 Caption 属性代表的值相同,而且是要每按键一次就侦测一次必竟你只判断一个英文字

自已写看看吧...

Caption是什么=.=+
我做出来他会变成
按相同(A按A)会变
但是如果前面有不同后面相同不会变->(A按B再A)
如果是放到KeyPress变成按两下才会变(上面的问题也还在),这边我又不会用了>"<

献花 x0
引用 | 编辑 GNUGCC
2007-06-15 22:56
3楼
  
Caption 是 Label 的变数储存的属性,其实你也可以先把产生出来的英文储存在 Byte 型态的字元变数里再拿来做判断...

在 KeyPress 里把传入按键的值和你储存的英文 Byte 变数做判断,
这样不管你的 TextBox1 有多少字元都不会受影响因为
当按下键盘时就会传入一次按键的代码然后立即做判断...

献花 x0
引用 | 编辑 overing
2007-06-16 06:19
4楼
  
复制程式
Const Str1 As String = "abcdefghijklmnopqrstuvwxyz"

Private Sub Form_Load()
        Dim R As Integer
        Text1 = ""
        Randomize
        R = Fix(Rnd * 26) + 1
        Label1 = Mid(Str1, R, 1)
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    If LCase(Right(Text1, 1)) = LCase(Label1) Then
        Dim R As Integer
        Text1 = ""
        Randomize
        R = Fix(Rnd * 26) + 1
        Label1 = Mid(Str1, R, 1)
    End If
End Sub

正确来讲 [Caption]属性 是 [Label]物件类别 的[显示属性]...
就像 [TextBox]物件类别 的 [Text]属性 一样
然后VB的物件有个方便的功能就是物件名称能提取该物件最常用的属性
所以今天建立一个名称叫"Label1"的[Label]的物件
Label1.Caption = "test"

Label1 = "test"
这两行的意思是一样的...

至于为什么CODE要写在KeyUp...试试下面的
复制程式
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Debug.Print "down event" & Text1
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Debug.Print "Press event" & Text1
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    Debug.Print "up event" & Text1
End Sub
就会知道...当Press被引发的时候Text的内容是空的...
所以没办法判断输入的字元...

献花 x0
引用 | 编辑 GNUGCC
2007-06-16 07:21
5楼
  
Private Sub Text1_KeyPress(KeyAscii As Integer)
Debug.Print "Press event" & Text1
End Sub

其实如果在 KeyPress 事件的话应该要用传入的 KeyAscii 的值做判断,因为那个是
当键盘按下时的 Ascii 代码,你可以在 Debug.Print 后面加上输出 KeyAscii 就可以知道 Ascii 的值了...

如果要和 TextBox 的值做判断也可以,不过如果 TextBox 里面有英文或是其他型态的值在里面的话
可能没办法做判断了...

献花 x0
引用 | 编辑 v52186
2007-06-16 08:48
6楼
  
复制程式
        Dim r As New Random
        Dim i As Integer
        i = r.Next(65, 90)
        Label1.Text = Chr(i)

这是乱数产生A~Z的方式
我是放在Form_Load...有错要说一下~谢

你们给的代码.我贴上去都会有错误@@
我再试试看

怎么都没人回了...
研究到头破还是都错...
除了这里
我不知道去哪问了...~"~

献花 x0
引用 | 编辑 overing
2007-06-18 16:42
7楼
  
RE:GNUGCC
恩恩...的确是在KeyPress的时候会先接收到KeyAscii...受教了!~谢谢XDb

RE:v52186
刚刚回头看了第1篇...
你的IDE是VB2005...所以写法会不太一样(我的是VB6的XD)
像你的产生乱数的方法这边也是不能用XD
把CODE的意思理解一下再用2005的表达法(写法)写一次应该就OK了...应该... 表情

献花 x0
引用 | 编辑 v52186
2007-06-18 17:02
8楼
  
下面是引用overing于2007-06-18 16:42发表的 :
RE:GNUGCC
恩恩...的确是在KeyPress的时候会先接收到KeyAscii...受教了!~谢谢XDb

RE:v52186
刚刚回头看了第1篇...
.......

那怎么办=.=
期末考就要考了>"<
找不到人求救... 表情

献花 x0
引用 | 编辑 GNUGCC
2007-06-18 22:10
9楼
  
你在 TextBox 的 KeyPress 事件里把传入的 KeyAscii 和乱数产生的英文字做判断假如一样的话
再重新用乱数产生一次...

记住,不要和 TextBox 做判断,因为题目要求只要输入的
字元其中一个和产生出来的英文字元一样的话就重新取乱数...

你可以把取乱数的程式写在函式里面,然后在 KeyPress
里判断并做呼叫动作...

献花 x0
引用 | 编辑 v52186
2007-06-19 08:29
10楼
  
下面是引用GNUGCC于2007-06-18 22:10发表的 :
你在 TextBox 的 KeyPress 事件里把传入的 KeyAscii 和乱数产生的英文字做判断假如一样的话
再重新用乱数产生一次...

记住,不要和 TextBox 做判断,因为题目要求只要输入的
字元其中一个和产生出来的英文字元一样的话就重新取乱数...
.......
"把传入的 KeyAscii 和乱数产生的英文字做判断"
这边怎么写,我也刚学不久,大概知道怎运作,但是不知道怎么打@@
想到头好痛,拜托了~"~

献花 x0
引用 | 编辑 GNUGCC
2007-06-19 21:19
11楼
  
'下面这个是用来产生乱数你可以把它放在函式里面
Dim r As New Random
Dim i As Integer

'这个 i 稍候会被用在 Text1 的 KeyPress 事件传入的 KeyAscii 判断, 可能 i 要宣告为全堿变数
i = r.Next(65, 90)
Label1.Text = Chr(i)

'这个是 Text1 的 KeyPress 事件
Private Sub Text1_KeyPress(KeyAscii As Integer)
'假如按下的按键和乱数的值一样的话就重新取乱数
If KeyAscii = i Then
  '这里做取乱数呼叫动作达到重新取乱数的目的
End If
End Sub

献花 x0
引用 | 编辑 v52186
2007-06-19 21:54
12楼
  
下面是引用GNUGCC于2007-06-19 21:19发表的 :
'下面这个是用来产生乱数你可以把它放在函式里面
Dim r As New Random
Dim i As Integer

'这个 i 稍候会被用在 Text1 的 KeyPress 事件传入的 KeyAscii 判断, 可能 i 要宣告为全堿变数
.......

我照你的输入后
执行程式没有反应...
怎么会这样0.0
复制程式
Public Class Form3
    Dim r As New Random
    Dim i As Integer
    Private Sub Text1_KeyPress(ByVal KeyAscii As Integer)
        If KeyAscii = i Then
            Label1.Text = ""
            TextBox1.text = ""
            i = r.Next(65, 90)
            Label1.Text = Chr(i)
        End If
    End Sub
    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        i = r.Next(65, 90)
        Label1.Text = Chr(i)
    End Sub
End Class
哪边放错了吗?

献花 x0
引用 | 编辑 GNUGCC
2007-06-19 22:15
13楼
  
i 宣告为全域变数看看...

献花 x0
引用 | 编辑 v52186
2007-06-19 22:22
14楼
  
有阿
我放在最上面了
一样没有反应

献花 x0
引用 | 编辑 overing
2007-06-19 22:36
15楼
  
可能是大小写问题...
ASCIICODE 65~90是大写字
有可能你输入的是小写所以才没反应
(怎么输入LABEL都不会RANDOM取新字)
记得把字串用LCase 或UCase 把产生的字跟输入的字统一成大写或小写再来判断

我想老师说大小写没差的话
应该就是指"不管输入大写还是小写都要能起作用"...

PS."i"跟"r"放那个位置就算是全域变数了(FORM3里)

献花 x0
引用 | 编辑 v52186
2007-06-19 22:51
16楼
  
不...问题是我输入大小写都没有反应@@
大小写没差(会变就好了QQ),当然要做到最好我也没意见0.0
今天有点晚了
明天我再来看>"<

献花 x0
引用 | 编辑 GNUGCC
2007-06-19 23:43
17楼
  
可能要借助 Debug.Print 叙述输出 KeyAscii 的值来判断按下的字元是否和乱数产生出的字元相同...

Debug.Print KeyAscii
Debug.Print i

上面的 i 是指乱数的值, 可以试看看,假如 KeyAscii 和 i 相同的话就应该没问题...

献花 x1
引用 | 编辑 overing
2007-06-19 23:53
18楼
  
try
复制程式
Public Class Form3
  Dim r As New Random
  Dim i As Integer
  Private Sub Text1_KeyPress(ByVal KeyAscii As Integer)
    If KeyAscii = i Then
        TextBox1.text = ""
        KeyAscii = 0
        i = r.Next(65, 90)
        Label1.Text = Chr(i)
    End If
  End Sub
  Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    i = r.Next(65, 90)
    Label1.Text = Chr(i)
  End Sub
End Class
KeyAscii = 0
这个漏了...pass是在[键盘输入]跟[显示在物件上面]两事件之间
只有TextBox1.text = ""没用...
因为:

[键盘输入]

[pass事件] 这时候TextBox1.text = ""

[显示在物件上面]这里又会把KeyAscii转成字元显示在TextBox1上

所以KeyAscii=0也要

如果还是不行请描述一下哪里不ok
比方说
"输入跟LABEL一样的自之后TEXTBOX没有变成空白"
或是
"LABEL的字都只出现一种"
或是
"TEXTBOX输入跟LABEL一样的字,LABEL还是都不会改变"
之类的...这样要侦错比较快

献花 x0
引用 | 编辑 v52186
2007-06-20 15:18
19楼
  

图 1.


下面是引用overing于2007-06-19 23:53发表的 :
try
[code]Public Class Form3
Dim r As New Random
Dim i As Integer
Private Sub Text1_KeyPress(ByVal KeyAscii As Integer)
.......
两位的方法都试过了
Textbox输入跟Label显示的文字后
Label跟Textbox都不会改变
不管输入什么都没有反应(大小写都试过)

献花 x0
引用 | 编辑 overing
2007-06-20 22:53
20楼
  
...
头大了...CODE应该都正确了才对...
这边VB6一样的写法(不是指语法)
就运作正常@@...
等我装上2005吧... 表情

献花 x0
引用 | 编辑 overing
2007-06-21 09:43
21楼
  
终于搞定了...
.Net的写法跟VB6差太多了 表情
复制程式
Public Class Form1
    Dim r As New Random
    Dim i As Integer
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        i = r.Next(65, 90)
        Label1.Text = Chr(i)
    End Sub

    Private Sub TextBox1_KeyPress1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar = i Then 'e.KeyChar 跟VB6里的KeyAscii意思一样
            TextBox1.Text = ""
            e.Handled = True '对应VB6的 KeyAscii=0 ,意思不一样...但是作用都是不让TEXTBOX收到输入
            i = r.Next(65, 90)
            Label1.Text = Chr(i)
        End If
    End Sub
End Class


献花 x0
引用 | 编辑 v52186
2007-06-21 17:26
22楼
  
下面是引用overing于2007-06-21 09:43发表的 :
终于搞定了...
.Net的写法跟VB6差太多了 表情
[code]Public Class Form1
  Dim r As New Random
  Dim i As Integer
.......

这行出现错误
e.KeyChar = i
型别'Char'和'Integer'的运算子'='未定义

再拜托了 表情

献花 x0
引用 | 编辑 overing
2007-06-21 20:26
23楼
  
改成
If e.KeyChar.ToString = Chr(i) Then
应该就...

献花 x1
引用 | 编辑 v52186
2007-06-21 22:12
24楼
  
下面是引用overing于2007-06-21 20:26发表的 :
改成
If e.KeyChar.ToString = Chr(i) Then
应该就...
太感谢了...终于做出来了...谢谢两位的帮助=.=

献花 x0