1、问题 Private Sub lsvShow_Click() On Error GoTo errtrap If Not lsvShow.SelectedItem Is Nothing Then msgbox lsvShow.SelectedItem.Text Else On Error GoTo 0 Exit Sub End If
On Error GoTo 0 Exit Sub errtrap: On Error GoTo 0 End Sub 2、问题 Load form1 '在这期间,运行你的启动画面 form1.show
if listview1.selectitem is nothing then msgbox"您是不是点错了!请再仔细看一看!" exit sub end if
to SoHo_Andy(冰) ... 问题一: listview只要有数据行,不管你点击的是数据行还是空白行,Not lsvShow.SelectedItem Is Nothing 的值总是为True,所以这个方法是不可行的。问题二: 当Load form1时,窗体已经被看到了,而我需要的是Load form1完成之后才被看到,所以还需要用别的方法。 不过不管怎么说还是谢谢你。
第一题 Dim a As BooleanPrivate Sub Form_Load() a = False End SubPrivate Sub List1_Click() a = True End SubPrivate Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If a = False Then MsgBox "为空" End If End Sub第二个问题 把要显示的窗体做成MDI子窗体。
对于第一个问题,由于listview的ItemClick事件先于Click事件触发所以可以在ItemClick事件中写入标志,ItemClick事件中判断该标志。代码实现如下:Option Explicit Dim mIsItem As Boolean Private Sub Form_Load() ListView1.ColumnHeaders.Add , , "aaa" ListView1.ListItems.Add , , "test1" ListView1.ListItems.Add , , "test2" ListView1.ListItems.Add , , "test3" mIsItem = False End SubPrivate Sub ListView1_Click() If mIsItem = False Then MsgBox "nothing is clicked" End If
'do something what you want mIsItem = False End SubPrivate Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) mIsItem = True 'do something what you want End Sub
对于第二个问题 Private Sub Form_Load() Me.Hide 'do something what you want Me.Show End Sub
Private Sub Form_Load() Me.Hide "执行操作的语句" Me.Show End Sub 难道这样做不可以吗?
to : rexyudl(隼) 我在能加me.hide的所有地方都加了,可是就是不行 也不知道哪里出现了毛病
你自己去做个实验啊! 在 Dim i As Long Dim j As Long Private Sub Form_Load() Me.Hide For i = 1 To 100000 For j = 1 To 1000 x = j + 1 Next j Next i Me.Show End Sub 看看出什么效果! 我认为完全可以满足你的要求啊! 你可能还是有地方没有用对吧?
Dim i As Long Dim j As Long Private Sub Form_Load() Me.Hide
End Sub一至运行到End sub 都是看不见的,也是我需要的效果, 但是End Sub这句运行结束,窗出来了,不知道为啥...
第二个问题是否可以这样: 把加载数据及显示窗体的代码写在Sub Main中(当然工程的启动属性要改为Sub Main喽) 而不是在窗体的Load事件中加载数据。 需要两个窗体,属性全部使用默认和一个模块 Form1中添加一个ListBox和一个Label,同样全部使用默认属性 Form2为启动画面'以下代码在模块中 Private Declare Function timeGetTime Lib "winmm.dll" () As LongPublic Sub main() ' Load Form1 Form2.Show Dim starttime As Long Dim endtime As Long Dim i As Long DoEvents starttime = timeGetTime For i = 0 To 200000 Form1.List1.AddItem Format$(i, "000000") Next i endtime = timeGetTime Form1.Label1.Caption = "用时:" & endtime - starttime & "ms" Unload Form2 Form1.Show End Sub
If listview1.SelectedItem Is Nothing Then msgbox "点了空白的" End If
简单: Form2.Tag="Form2" Form2.Show 1
你也可以在Form2上添加一个Command(Visible=False)并添加代码: Form1.Show Unload Form2 修改Sub Main为: Public Sub main() ' Load Form1 Form2.Show Dim starttime As Long Dim endtime As Long Dim i As Long DoEvents starttime = timeGetTime For i = 0 To 100000 Form1.List1.AddItem Format$(i, "000000") Next i endtime = timeGetTime Form1.Label1.Caption = "用时:" & endtime - starttime & "ms" Form2.Label1.Caption = "数据加载完毕。" Form2.Command1.Visible = True ' Unload Form2 ' Form1.Show End Sub 这样一来,如果你不按Form2上的Command的话,Form1将不会被显示。
Timer1.Enabled = True Timer1.Interval = 10000 Me.Show End SubPrivate Sub Timer1_Timer() If MsgBox("现在是否显示窗体?此提示每10秒显示一次,以便你能做出决定", vbYesNo) = vbYes Then Me.Left = Positionx Me.Top = Positiony End If End Sub
Private Sub lsvShow_Click()
On Error GoTo errtrap
If Not lsvShow.SelectedItem Is Nothing Then
msgbox lsvShow.SelectedItem.Text
Else
On Error GoTo 0
Exit Sub
End If
On Error GoTo 0
Exit Sub
errtrap:
On Error GoTo 0
End Sub
2、问题
Load form1
'在这期间,运行你的启动画面
form1.show
msgbox"您是不是点错了!请再仔细看一看!"
exit sub
end if
问题一:
listview只要有数据行,不管你点击的是数据行还是空白行,Not lsvShow.SelectedItem Is Nothing 的值总是为True,所以这个方法是不可行的。问题二:
当Load form1时,窗体已经被看到了,而我需要的是Load form1完成之后才被看到,所以还需要用别的方法。 不过不管怎么说还是谢谢你。
不知道这样能不能帮助你实现你想做的 或者刚加载list1时你算一下list1中总共有多少项,然后再list1.click事件中判断list1.listindex这个值是否大于list1的项数 ,如果是,就证明点击的是空 不知道我说的对不对,瞎想的:)
listbox和listview不太一样
继续等待
然后在显示的时候在show
Private Sub Command1_Click()
Load Form2
End SubPrivate Sub Command2_Click()
Form2.Show
End Sub
private sub form2_load()
'
'
end sub
form2-load 中末尾加me.hide
Dim a As BooleanPrivate Sub Form_Load()
a = False
End SubPrivate Sub List1_Click()
a = True
End SubPrivate Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If a = False Then
MsgBox "为空"
End If
End Sub第二个问题
把要显示的窗体做成MDI子窗体。
当点的是空白处时是不激发单击事件的所以A还是等于FALSE。
当A=FALSE的时候说明点的是空白行在List1_MouseUp的里判断一下A的值就行了啊!
可以先me.hide
然后在执行load事件
Private Sub Form_Load()
Form1.Top = 0
Form1.Left = 0
Form1.Width = 0
Form1.Height = 0'.............
'.............Form1.Top = 0
Form1.Left = 0
Form1.Width = Screen.Width
Form1.Height = Screen.Height - 400
End Sub
窗体的加载时,需要加入比较多的数据,这个我也不想的
还有,我已经先me.hide,甚至也把窗体设置了不可见属性,然后再load
但是仍然不行,一旦执行到load ,窗体就看见了,我也不知道为什么。
Dim mIsItem As Boolean
Private Sub Form_Load()
ListView1.ColumnHeaders.Add , , "aaa"
ListView1.ListItems.Add , , "test1"
ListView1.ListItems.Add , , "test2"
ListView1.ListItems.Add , , "test3"
mIsItem = False
End SubPrivate Sub ListView1_Click()
If mIsItem = False Then
MsgBox "nothing is clicked"
End If
'do something what you want
mIsItem = False
End SubPrivate Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
mIsItem = True
'do something what you want
End Sub
Private Sub Form_Load()
Me.Hide
'do something what you want
Me.Show
End Sub
那么你可以在
窗体.SHOW之前把查询做完。
赋给一个公用记录集然后窗体.SHOW再把功用记录集里的数据赋给要显示数据的控件!
这样做可以节省出执行查询操作的时间!这种龌龊的招我都能想出来!!!
晕死!
Me.Hide
"执行操作的语句"
Me.Show
End Sub
难道这样做不可以吗?
我在能加me.hide的所有地方都加了,可是就是不行
也不知道哪里出现了毛病
在
Dim i As Long
Dim j As Long
Private Sub Form_Load()
Me.Hide
For i = 1 To 100000
For j = 1 To 1000
x = j + 1
Next j
Next i
Me.Show
End Sub
看看出什么效果!
我认为完全可以满足你的要求啊!
你可能还是有地方没有用对吧?
Dim j As Long
Private Sub Form_Load()
Me.Hide
End Sub一至运行到End sub 都是看不见的,也是我需要的效果,
但是End Sub这句运行结束,窗出来了,不知道为啥...
把加载数据及显示窗体的代码写在Sub Main中(当然工程的启动属性要改为Sub Main喽)
而不是在窗体的Load事件中加载数据。
需要两个窗体,属性全部使用默认和一个模块
Form1中添加一个ListBox和一个Label,同样全部使用默认属性
Form2为启动画面'以下代码在模块中
Private Declare Function timeGetTime Lib "winmm.dll" () As LongPublic Sub main()
' Load Form1
Form2.Show
Dim starttime As Long
Dim endtime As Long
Dim i As Long
DoEvents
starttime = timeGetTime
For i = 0 To 200000
Form1.List1.AddItem Format$(i, "000000")
Next i
endtime = timeGetTime
Form1.Label1.Caption = "用时:" & endtime - starttime & "ms"
Unload Form2
Form1.Show
End Sub
msgbox "点了空白的"
End If
Form2.Tag="Form2"
Form2.Show 1
Form1.Show
Unload Form2
修改Sub Main为:
Public Sub main()
' Load Form1
Form2.Show
Dim starttime As Long
Dim endtime As Long
Dim i As Long
DoEvents
starttime = timeGetTime
For i = 0 To 100000
Form1.List1.AddItem Format$(i, "000000")
Next i
endtime = timeGetTime
Form1.Label1.Caption = "用时:" & endtime - starttime & "ms"
Form2.Label1.Caption = "数据加载完毕。"
Form2.Command1.Visible = True
' Unload Form2
' Form1.Show
End Sub
这样一来,如果你不按Form2上的Command的话,Form1将不会被显示。
listview1.ListItems.Clear
listview1空白的多余行
一个窗体,一个timer,timer是为了每隔一段时间提醒你一下以便你决定窗体是否显示出来Private Sub Form_Load()
Me.Hide
Positionx = Me.Left
Positiony = Me.Top '保存当前位置
Me.Left = -10000
Me.Top = -10000
MsgBox "窗体现在隐藏到屏幕的不可见区域"
'这里可以做你想做的事情
Timer1.Enabled = True
Timer1.Interval = 10000
Me.Show
End SubPrivate Sub Timer1_Timer()
If MsgBox("现在是否显示窗体?此提示每10秒显示一次,以便你能做出决定", vbYesNo) = vbYes Then
Me.Left = Positionx
Me.Top = Positiony
End If
End Sub
1。工程的启动改为sub main,先调用一函数装载窗体(load),处理完数据后show 出此窗体。
2。把窗体属性改为autoredraw属性改为true.
3。自己多多调试,但最好不要单步调试,那样可能不正常。
虽然你的方法不是常规方法,但是针对我的问题却很有效,谢谢啦
保留三天后结贴。
答:load()事件