回 帖 发 新 帖 刷新版面

主题:问各位老师几个比较难的问题(对本人而言)~~谢谢!

可能问的有些幼稚,或是奇怪,没办法,菜鸟都是这样~~帮忙吧,谢过。

1、给文本框赋值,直接写成text1.text=x!:text2.text=y#,而不是text1.text=str$(x):text2.text=str$(y).
将来代码运行时能否影响数值运算,或是产生别的歧义?

2、在有若干个控件(比如text)的界面上,用方向键实现TAB顺序,怎么编代码?或者设置控件属性?

3、sstab控件,每个选项卡都有若干个text控件,用下面的小段代码检查各text是否为空。问题来了,如果某个文本框空置,譬如text5,如何使text5所在的选项卡当前显示?
Dim ctl As Control
 For Each ctl In Controls
   If TypeOf ctl Is TextBox Then
     If ctl.Text = "" And ctl.Enabled = True Then
        【[color=FF0000]这里我想加上几行代码,使符合条件的空文本框所在的选项卡处在显示状态,并且使空文本框获得焦点[/color]】
        MsgBox "输入数据不能为空"
        Exit Sub
     End If
   End If
 Next

4、form1.load事件过程,由于此时窗体内控件尚未加载(书上这么说的),如何才能实现下面的效果?
Private Sub Form_Load()

Image1.Picture = LoadPicture(App.Path & "\graphics\欢迎.jpg")

各位老师,如果比较麻烦,给个简单提示也行~~感谢~~

回复列表 (共12个回复)

沙发

我回答2个容易的:
1.不会。
4.在Image1.Picture = LoadPicture(App.Path & "\graphics\欢迎.jpg")语句前面加一句:
窗体名.show

板凳

感谢一江老师的回帖~~

前边已试过多次,加上form1.show方法,没管用。但不是说这个做法不对,我怀疑另有原因,应该能显示的,可能是点击“运行”,同时触发了sstab_click事件,因为sstab_click事件有多张图片随即放进image1,所以不显示load事件要求的图片。我尝试把sstab_click事件去掉以后就好了。到现在我也不知道为什么?

按说应该form1.load执行在前,sstab_click在后,真是莫名其妙了?

那位老师说一说,这是为什么?

3 楼

你把有关的代码发上来看看

4 楼

老师们给看一下,问题出在哪里?

在Form_Load()阶段,可能SSTab1.Tab=0触发了click事件,直接进入case0语句,所以未执行LoadPicture(App.Path & "\graphics\欢迎.jpg")。因为实际点击vb“运行”时,image上出现的是SSTab1_Click过程中的图片。

界面:窗体form1上,画一sstab1控件(5个选项卡),再画一image1控件。

Private Sub Form_Load()

'窗体装入,0号选项卡显示,Image1装入(“欢迎”.jpg)

SSTab1.Tab = 0    
Image1.Picture = LoadPicture(App.Path & "\graphics\欢迎.jpg")
End Sub


Private Sub SSTab1_Click(PreviousTab As Integer)

'单击SSTab1时,根据选项卡号,Image1选择装入相应的(“”.jpg)

Select Case SSTab1.Tab
Case 0
 Randomize Timer
 dj! = Rnd(2)
  If dj < 0.2 Then
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片1.jpg")    
  ElseIf dj < 0.4 Then
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片2.jpg")    
  ElseIf dj < 0.6 Then
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片3.jpg")    
  ElseIf dj < 0.8 Then
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片4.jpg")    
  Else
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片5.jpg")    
  End If
Case 1
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片6.jpg")    
Case 2
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片7.jpg")    
Case 3
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片8.jpg")    
Case 4
    Image1.Picture = LoadPicture(App.Path & "\graphics\图片9.jpg")    
End Select
End Sub

5 楼

来晚了,第2个问题楼上的貌似没回答,说点想法
可以在窗体的keypress事件里编写代码看看,当按了键盘的任意键时候触发keypress事件.
在这里判断是否按下了方向键,4个方向键的ascII←37 ↑38 →39 ↓40
不过实际中数据的显示没有绝对的上下左右关系吧,如果不是那种排列完全对齐的界面感觉并不实用,总不能在根据各控件的所处位置计算一下哪个最接近用户选择的方向吧,感觉划不来

6 楼

不要在 Form_Load 过程中设置 SSTab1.Tab = 0,而要在 SSTab1 的属性窗口中设置

7 楼

学会调试

8 楼

谢谢一江和kabc两位高手的回答,对于4个问题,我想属性的窗口设置提法是正确的,现在可能有很多方面干扰,代码运行起来不稳定,产生很多种效果。由于初学,不得要领,我写的代码质量看来有问题~~

对于第2个问题,我还想试一下,用方向键或是回车键代替tab,这毕竟是一个程序要实现的基本功能,主要还是要接触一下vb编程的大体思路。

一个帖子专家分不能超过50分,我才知道,呵呵。

我关心的第3个问题,高手们能否提供一下要点啊~~怎样使控件与他所在的父窗口(亦即它的载体)关联起来?

9 楼

[quote]学会调试[/quote]

谢谢,我是新学vb,望大侠多指教。非常羡慕你们这些运用自如的专业者~~

10 楼

第3个问题:
Private Sub Command1_Click()
Dim ctl As Control
 For Each ctl In Controls
   If TypeOf ctl Is TextBox Then
     If ctl.Text = "" And ctl.Enabled = True Then
        MsgBox "输入数据不能为空"
        SSTab1.Tab = 2 '空文本框位于哪个选项卡,这是个难点,也是个关键问题
        ctl.SetFocus
        Exit For
     End If
   End If
 Next
End Sub

为了解决难点问题,只有把文本框设置成控件数组,当检测到空文本框后,先取得该控件数组元素的下标,再根据这个下标设置选项卡。下面是一个例子,在这个例子中,假设选项卡的Tabs=3,每个选项卡页面上有两个文本框,共有6个文本框,文本框设置为控件数组,其下标为0-5,代码如下:


Private Sub Command1_Click()
Dim ctl As Control, index As Integer
 For Each ctl In Controls
   If TypeOf ctl Is TextBox Then
     If ctl.Text = "" And ctl.Enabled = True Then
       Select Case ctl.index
         Case 0, 1: index = 0
         Case 2, 3: index = 1
         Case 4, 5: index = 2
        End Select
        SSTab1.Tab = index
        MsgBox "输入数据不能为空"
        ctl.SetFocus
        Exit For
      End If
   End If
 Next
End Sub

我来回复

您尚未登录,请登录后再回复。点此登录或注册