引用 | 编辑
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发表的 : 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 所以没办法判断输入的字元... 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发表的 : 那怎么办=.= 期末考就要考了>"< 找不到人求救... 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发表的 :"把传入的 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发表的 : 我照你的输入后 执行程式没有反应... 怎么会这样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 |
引用 | 编辑
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 这个漏了...pass是在[键盘输入]跟[显示在物件上面]两事件之间 只有TextBox1.text = ""没用... 因为: [键盘输入] ↓ [pass事件] 这时候TextBox1.text = "" ↓ [显示在物件上面]这里又会把KeyAscii转成字元显示在TextBox1上 所以KeyAscii=0也要 如果还是不行请描述一下哪里不ok 比方说 "输入跟LABEL一样的自之后TEXTBOX没有变成空白" 或是 "LABEL的字都只出现一种" 或是 "TEXTBOX输入跟LABEL一样的字,LABEL还是都不会改变" 之类的...这样要侦错比较快 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 |