http://www.csdn.net/expert/topic/460/460639.shtm
主  题:关于SSTAB控件的问题?
作  者:cy_nwau
所属论坛:Visual Basic
问题点数:70
回复次数:28
发表时间:2002-1-6 18:43:13
 
  
  我的SSTAB控件共有5个TAB,每个TAB上想通过LOAD生成一个LABEL控件数组,这可能要用到容器,但我如何才能让新建立的LABEL进入到指定的TAB上呢?
 
回复贴子: 
回复人: cy_nwau(阿东) (2002-1-6 18:48:20)  得0分 
是不是都吃饭去了?  
回复人: cy_nwau(阿东) (2002-1-6 18:49:08)  得0分 
2小时后回来?如果路过,帮助UP一下好不好?  
回复人: shawls(小山(坚持VB,学Delphi和C#)) (2002-1-6 19:23:00)  得0分 Dim i As Integer
For i = FrmMain.LBound To FrmMain.UBound Step 1
FrmMain(i).Visible = False
Next i
FrmMain(SetTSp.SelectedItem.Index - 1).Visible = True
FrmMain(SetTSp.SelectedItem.Index - 1).Move 300, 570, 6135, 3975
FrmMain(SetTSp.SelectedItem.Index - 1).ZOrder 0
 
回复人: shawls(小山(坚持VB,学Delphi和C#)) (2002-1-6 19:23:24)  得0分 
Private Sub SStab_Click()
Dim i As Integer
For i = FrmMain.LBound To FrmMain.UBound Step 1
FrmMain(i).Visible = False
Next i
FrmMain(SetTSp.SelectedItem.Index - 1).Visible = True
FrmMain(SetTSp.SelectedItem.Index - 1).Move 300, 570, 6135, 3975
FrmMain(SetTSp.SelectedItem.Index - 1).ZOrder 0
End Sub
 
回复人: cy_nwau(阿东) (2002-1-6 19:42:17)  得0分 
'在窗体上做了个SSTAB和LABEL1(0)在第0个TAB上,LABEL2(0)在第1个TAB上。
'目的是想在两个TAB上都会出现5个LABEL,但不行。
Private Sub Form_Load()
    Me.Width = Screen.Width
    Me.Height = Screen.Height
    SSTab1.Height = Me.Height * 0.95
    SSTab1.Width = Me.Width * 0.95
    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
    For i = 1 To 5
        SSTab1.Tab = 0
        Load Label1(i)
        With Label1(i)
            .Caption = i
            .Left = Label1(i - 1).Left
            .Top = Label1(i - 1).Top + 2 * Label1(i - 1).Height
            .Visible = True
        End With
        SSTab1.Tab = 1
        Load Label2(i)
        With Label2(i)
            .Caption = i
            .Left = Label2(i - 1).Left
            .Top = Label2(i - 1).Top + 2 * Label2(i - 1).Height
            .Visible = True
        End With
    Next i
End Sub
 
回复人: cy_nwau(阿东) (2002-1-6 19:44:01)  得0分 
各位请指出问题出在哪里。
shawls(小山(坚持VB,学Delphi和C#))能否对程序做一下解释,小弟好象不懂您的意思,是不是我问题没说清楚。  
回复人: cy_nwau(阿东) (2002-1-6 20:04:12)  得0分 
shawls(小山(坚持VB,学Delphi和C#)) 请指点一下?
各位路过的也请GZ一下嘛!!!!!!!  
回复人: gnoyil(一凡) (2002-1-6 22:47:08)  得0分 
gz一下吧!  
回复人: shawls(小山(坚持VB,学Delphi和C#)) (2002-1-6 22:54:48)  得0分 : cy_nwau(阿东) (2002-1-6 19:42:17)  得0分 
'在窗体上做了个SSTAB和LABEL1(0)在第0个TAB上,LABEL2(0)在第1个TAB上。
'目的是想在两个TAB上都会出现5个LABEL,但不行。
if  SetTSp.SelectedItem.Index =5 thenlabel1(5).Visible = True            '可见
label1(5).Move 300, 570, 6135, 3975  '位置
label1(5).ZOrder 0label2(5).Visible = True
label3(5).Move 300, 570, 6135, 3975
label4(5).ZOrder 0end if
 
回复人: shawls(小山(坚持VB,学Delphi和C#)) (2002-1-6 22:55:06)  得10分 
mail [email protected]
qq9181729  
回复人: hand2001(我爱VB不爱我) (2002-1-6 22:58:21)  得0分 
简单:
Private Sub Command1_Click()
    SSTab1.Tab = 1 '放在第二个TAB
    Set Label1.Container = SSTab1
End Sub 
回复人: cy_nwau(阿东) (2002-1-7 10:44:39)  得0分 
谢谢各位,我试试!然后给分!  
回复人: cy_nwau(阿东) (2002-1-7 11:32:08)  得0分 
现在我将问题简单化。
我的一个SSTAB控件有5个TAB,我想给5个TAB以不同的ToolTipText,能否实现。  
回复人: yangzhaoyu(老妖) (2002-1-7 11:57:29)  得0分 
Private Sub Form_Load()
    For i = 1 To 3
        TabStrip1.Tabs(i).ToolTipText = "tab" + Str(i)
    Next
End Sub 
回复人: hand2001(我爱VB不爱我) (2002-1-7 11:58:07)  得0分 
'当然可以实现了。简单:Dim PerTabWidth As Double
Dim Tips() As StringPrivate Sub Form_Load()
    PerTabWidth = SSTab1.Width / SSTab1.Tabs
    ReDim Tips(SSTab1.Tabs)
    For i = 0 To SSTab1.Tabs - 1
        Tips(i) = "这是SSTAB的第 " & i & " 个ToolTipText。没有问题了吧。"
    Next
End SubPrivate Sub SSTab1_Click(PreviousTab As Integer)
SSTab1.ToolTipText = SSTab1.Tab
End SubPrivate Sub SSTab1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    SSTab1.ToolTipText = Tips(Int(X / PerTabWidth))
End Sub
 
回复人: hand2001(我爱VB不爱我) (2002-1-7 12:00:05)  得0分 
忘了把这段删掉:
Private Sub SSTab1_Click(PreviousTab As Integer)
SSTab1.ToolTipText = SSTab1.Tab
End Sub
 
回复人: cy_nwau(阿东) (2002-1-7 12:32:15)  得0分 
那请教各位高手,我的这段程序实现不了问题出现在哪里?
'在窗体上做了个SSTAB和LABEL1(0)在第0个TAB上,LABEL2(0)在第1个TAB上。
'目的是想在两个TAB上都会出现5个LABEL,但不行。
Private Sub Form_Load()
    Me.Width = Screen.Width
    Me.Height = Screen.Height
    SSTab1.Height = Me.Height * 0.95
    SSTab1.Width = Me.Width * 0.95
    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
    For i = 1 To 5
        SSTab1.Tab = 0
        Load Label1(i)
        With Label1(i)
            .Caption = i
            .Left = Label1(i - 1).Left
            .Top = Label1(i - 1).Top + 2 * Label1(i - 1).Height
            .Visible = True
        End With
        SSTab1.Tab = 1
        Load Label2(i)
        With Label2(i)
            .Caption = i
            .Left = Label2(i - 1).Left
            .Top = Label2(i - 1).Top + 2 * Label2(i - 1).Height
            .Visible = True
        End With
    Next i
End Sub
 
回复人: yangzhaoyu(老妖) (2002-1-7 12:49:09)  得0分 
不用LOAD
使用SET LABEL1(I)=FORM1.CONTROLS.ADD("VB.LABEL","LABEL1"+TRIM(STR(I)))  
回复人: yangzhaoyu(老妖) (2002-1-7 13:02:50)  得10分 
Dim LABEL1(5) As Label, LABEL2(5) As Label
Private Sub Form_Load()
    Me.Width = Screen.Width
    Me.Height = Screen.Height
    SSTab1.Height = Me.Height * 0.95
    SSTab1.Width = Me.Width * 0.95
    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
    For I = 0 To 5
        SSTab1.Tab = 0
        Set LABEL1(I) = Form1.Controls.Add("VB.LABEL", "LABEL1" + Trim(Str(I)))
        With LABEL1(I)
            .Caption = I
            .Visible = True
            Set .Container = SSTab1
            If I <> 0 Then
                .Left = LABEL1(I - 1).Left
                .Top = LABEL1(I - 1).Top + 2 * LABEL1(I - 1).Height
            Else
                .Left = 100
                .Top = 100
            End If
        End With
        SSTab1.Tab = 1
        Set LABEL2(I) = Form1.Controls.Add("VB.LABEL", "LABEL2" + Trim(Str(I)))
        With LABEL2(I)
            .Caption = I
            .Visible = True
            Set .Container = SSTab1
            
            If I <> 0 Then
              .Left = LABEL2(I - 1).Left
                .Top = LABEL2(I - 1).Top + 2 * LABEL2(I - 1).Height
                .Visible = True
            Else
                .Left = 100
                .Top = 100
            End If
        
        End With
    Next I
End Sub 
回复人: hand2001(我爱VB不爱我) (2002-1-7 13:26:06)  得0分 
Label1(0)、Label2(0)控件在设计时必须放在Form1中,即他们的容器是Form而不是sstab1.
 
回复人: hand2001(我爱VB不爱我) (2002-1-7 13:42:46)  得0分 
再用set label().container=sstab1
还有,不能把Load和set label().container=sstab1同放在Form_Load()中, 必须分开, 否则,达不到效果。这应该是VB的BUG。例子如下:
    SSTab1.Tab = 0
    For i = 1 To 5
        With Label1(i)
            Set .Container = SSTab1
            .Visible = True
        End With
    Next
    
    SSTab1.Tab = 1
    For i = 1 To 5
        With Label2(i)
            Set .Container = SSTab1
            .Visible = True
        End With
    Next i
End SubPrivate Sub Form_Load()
    Me.Width = Screen.Width
    Me.Height = Screen.Height
    SSTab1.Height = Me.Height * 0.95
    SSTab1.Width = Me.Width * 0.95
    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
    
    For i = 1 To 5
        Load Label1(i)
        With Label1(i)
            .Caption = i & "第一个Label数组"
            .Left = Label1(i - 1).Left
            .Top = Label1(i - 1).Top + 2 * Label1(i - 1).Height
        End With
    Next
    
    For i = 1 To 5
        Load Label2(i)
        With Label2(i)
            .Caption = i & "第二个Label数组"
            .Left = Label2(i - 1).Left
            .Top = Label2(i - 1).Top + 2 * Label2(i - 1).Height
        End With
    Next i
End Sub
'*********************************************************************
'而下面这种方式不行,达不到要求:(其实就是把两段一同放在Form_Load事件中)
'你们可以试一试。
'*********************************************************************
'Private Sub Form_Load()
'    Me.Width = Screen.Width
'    Me.Height = Screen.Height
'    SSTab1.Height = Me.Height * 0.95
'    SSTab1.Width = Me.Width * 0.95
'    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
'    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
'
'    For i = 1 To 5
'        Load Label1(i)
'        With Label1(i)
'            .Caption = i & "第一个Label数组"
'            .Left = Label1(i - 1).Left
'            .Top = Label1(i - 1).Top + 2 * Label1(i - 1).Height
'        End With
'    Next
'
'    For i = 1 To 5
'        Load Label2(i)
'        With Label2(i)
'            .Caption = i & "第二个Label数组"
'            .Left = Label2(i - 1).Left
'            .Top = Label2(i - 1).Top + 2 * Label2(i - 1).Height
'        End With
'    Next i
'    '**********************************************
'    SSTab1.Tab = 0
'    For i = 1 To 5
'        With Label1(i)
'            Set .Container = SSTab1
'            .Visible = True
'        End With
'    Next
'
'    SSTab1.Tab = 1
'    For i = 1 To 5
'        With Label2(i)
'            Set .Container = SSTab1
'            .Visible = True
'        End With
'    Next i
'End Sub
'
'
 
回复人: cy_nwau(阿东) (2002-1-7 17:26:18)  得0分 
: yangzhaoyu(老妖) 
你的代码我试了一下,不行啊?只能在第一个TAB上出现五个LABEL,第二个TAB上出现不了。什么原因?
Dim LABEL1(5) As Label, LABEL2(5) As Label
Private Sub Form_Load()
    Me.Width = Screen.Width
    Me.Height = Screen.Height
    SSTab1.Height = Me.Height * 0.95
    SSTab1.Width = Me.Width * 0.95
    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
    For I = 0 To 5
        SSTab1.Tab = 0
        Set LABEL1(I) = Form1.Controls.Add("VB.LABEL", "LABEL1" + Trim(Str(I)))
        With LABEL1(I)
            .Caption = I
            .Visible = True
            Set .Container = SSTab1
            If I <> 0 Then
                .Left = LABEL1(I - 1).Left
                .Top = LABEL1(I - 1).Top + 2 * LABEL1(I - 1).Height
            Else
                .Left = 100
                .Top = 100
            End If
        End With
        SSTab1.Tab = 1
        Set LABEL2(I) = Form1.Controls.Add("VB.LABEL", "LABEL2" + Trim(Str(I)))
        With LABEL2(I)
            .Caption = I
            .Visible = True
            Set .Container = SSTab1
            
            If I <> 0 Then
              .Left = LABEL2(I - 1).Left
                .Top = LABEL2(I - 1).Top + 2 * LABEL2(I - 1).Height
                .Visible = True
            Else
                .Left = 100
                .Top = 100
            End If
        
        End With
    Next I
End Sub
 
回复人: cy_nwau(阿东) (2002-1-7 17:28:22)  得0分 
hand2001(我爱VB不爱我) 
您的这一个程序少一个SUB,所以我不能确定您的这段程序写在哪一个事件里的。请明示
    SSTab1.Tab = 0
    For i = 1 To 5
        With Label1(i)
            Set .Container = SSTab1
            .Visible = True
        End With
    Next
    
    SSTab1.Tab = 1
    For i = 1 To 5
        With Label2(i)
            Set .Container = SSTab1
            .Visible = True
        End With
    Next i
End Subhand2001(我爱VB不爱我) 
您的这一个程序少一个SUB,所以我不能确定您的这段程序写在哪一个事件里的。请明示
 
回复人: hand2001(我爱VB不爱我) (2002-1-7 18:09:33)  得0分 
第一个子程序写在Form_Active()事件中。  
回复人: cy_nwau(阿东) (2002-1-7 19:11:42)  得0分 
谢谢,我再试一试  
回复人: cy_nwau(阿东) (2002-1-7 19:12:18)  得0分 
谢谢,我再试一试  
回复人: cy_nwau(阿东) (2002-1-7 20:02:03)  得0分 
各位大侠:
我试了你们的方法,好象都不行怎么办?帮帮助再助我一臂吧!!  
回复人: hand2001(我爱VB不爱我) (2002-1-7 20:18:00)  得50分 
这个方法肯定可行。请注意:
在form上放置Label1(0),Label2(0),Sstab1三个控件。
其中Label1(0),Label2(0)的容器是Form ,而不是SStab1
                            ——---————————
Private Sub Form_Activate()
  SSTab1.Tab = 0
    For i = 0 To 5
        With Label1(i)
            Set .Container = SSTab1
            .Visible = True
        End With
    Next
    
    SSTab1.Tab = 1
    For i = 0 To 5
        With Label2(i)
            Set .Container = SSTab1
            .Visible = True
        End With
    Next i
    SSTab1.Tab = 0
End SubPrivate Sub Form_Load()
    Me.Width = Screen.Width
    Me.Height = Screen.Height
    SSTab1.Height = Me.Height * 0.95
    SSTab1.Width = Me.Width * 0.95
    SSTab1.Top = (Me.Height - SSTab1.Height) / 2
    SSTab1.Left = (Me.Width - SSTab1.Width) / 2
    
    For i = 1 To 5
        Load Label1(i)
        With Label1(i)
            .Caption = i & "第一个Label数组"
            .Left = Label1(i - 1).Left
            .Top = Label1(i - 1).Top + 2 * Label1(i - 1).Height
        End With
    Next
    
    For i = 1 To 5
        Load Label2(i)
        With Label2(i)
            .Caption = i & "第二个Label数组"
            .Left = Label2(i - 1).Left
            .Top = Label2(i - 1).Top + 2 * Label2(i - 1).Height
        End With
    Next i
End Sub