VB2005 禁止控件自动刷新问题

oo渣渣oo 2010-05-21 05:31:44
=== 现状:

我的项目中做了一个加载数据行的窗口,用ListView显示数据,此窗口暂且称为Form1.

由于数据比较多,大概有2000多行,我就用了另一个窗口带ProgressBar的方式还显示加载的进度,此窗口暂且称为Form2.

同时时,为了让ProgressBar窗口(Form2)正常显示,我在Form1的加载循环中用了Application.DoEvents()来释放CPU占用.

=== 问题:
Application.DoEvents()用了以后,加载数据明显变慢了,加载时间是不用Application.DoEvents()的几倍!

我判断是因为ListView在不断地重绘导致消耗了过多的CPU时钟.

=== 尝试过的方法:
1. 用SuspendLayout()和ResumeLayout()想停止控件刷新,未果.
2. 用Visible = False的方式倒是不错,加载速度明显恢复了,但是界面太难看....

=== 求解:
有没有高级点的方式,来实现以下目的?

1.不要隐藏ListView控件,加载数据过程中Form1或ListView不刷新,直至加载完毕后一次性显示.

2.同时又要保证ProgressBar窗口(Form2)能正常刷新.

...全文
415 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
oo渣渣oo 2010-05-26
  • 打赏
  • 举报
回复
不好意思,搞忘记了......现在就分!
Forrest23 2010-05-25
  • 打赏
  • 举报
回复
怎么还没分脏?
oo渣渣oo 2010-05-24
  • 打赏
  • 举报
回复
哇,好多回答,慢慢研究中..........
皇城龙三 2010-05-24
  • 打赏
  • 举报
回复
取出来先赋值给一个数组,再填充listview
oo渣渣oo 2010-05-24
  • 打赏
  • 举报
回复
问题已解决,把所有数据先丢到ListViewItem的数组中,最后再添加到控件内.

虽然大家的意见没用上,不过辛苦费还是有滴,分脏........
Forrest23 2010-05-22
  • 打赏
  • 举报
回复
以前也做过一个 用另外一个窗体来显示进度条的窗体
’写了个函数 主要代码如下

If Number = 0 Then
frmProgress.Show()
frmProgress.prgbar.Value = Number
frmProgress.Label1.Text = str_caption
ElseIf Number = 100 Then
frmProgress.prgbar.Value = Number
frmProgress.Label1.Text = str_caption
frmProgress.Close()
frmProgress.Dispose()
Else
frmProgress.prgbar.Value = Number
frmProgress.Label1.Text = str_caption
End If
frmProgress.Refresh()
'这样可以进度条窗体可以正常显示 并不需要加 Application.DoEvents()

messi_yang 2010-05-22
  • 打赏
  • 举报
回复
來學習哈····
ncqingchuan1976 2010-05-22
  • 打赏
  • 举报
回复
两个窗体form1,form2 form1上有控件button 名OKBtn,listview名LV。form2上有processbar 名PB
form1代码

Public Class Form1
Private m_Count As Integer
Dim PrcentForm As Form2
Private Delegate Sub PrcentChangeDelegate(ByVal Prcent As Integer)

Public ReadOnly Property Count() As Integer
Get
Return m_Count
End Get
End Property
Private Sub OKbtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OKbtn.Click
LV.Items.Clear()
PrcentForm = Form2
PrcentForm.Show()

Dim i As Integer = 0
While i <= m_Count '模拟加载数据
PrcentForm.Invoke(New PrcentChangeDelegate(AddressOf PrcentForm.DisPlayVal), New Object() {CInt((i / (m_Count)) * 100)})
LV.Items.Add(i)
LV.Items(i).SubItems.Add(i)
i += 1
End While
PrcentForm.Close()

End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LV.Columns.Add("数据", 200, HorizontalAlignment.Center)
m_Count = 10000
Control.CheckForIllegalCrossThreadCalls = False
End Sub

End Class

form2代码

Public Sub DisPlayVal(ByVal Prcent As Integer)
PB.Value = Prcent

End Sub



不知是否是你要的效果.
ncqingchuan1976 2010-05-22
  • 打赏
  • 举报
回复
采取异步方式
以下须一个button,processbar

Public Class Form3
Private Delegate Function DisPlayText(ByVal Intput As Long)

Private Delegate Sub DisValue(ByVal Value As Integer)

Private exv As Boolean

Private Sub PbValue(ByVal Value As Integer)
PB.Value = Value
End Sub
Private Sub metext(ByVal text As Long)
Me.Text = text.ToString
End Sub
Dim iresult As IAsyncResult
Dim A As DisPlayText
Private Function Cal(ByVal Intput As Long) As Integer
Dim i As Long
Dim t As Long
For i = 0 To Intput
t = i + 1
Me.Invoke(New DisValue(AddressOf PbValue), CInt((i / Intput) * 100))
Next
Return t
End Function
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not exv Then

Try
A = New DisPlayText(AddressOf Cal)
iresult = A.BeginInvoke(100000, New AsyncCallback(AddressOf CallBack), Nothing)
Catch ex As Exception

Finally
exv = True
End Try

End If

End Sub

Private Sub CallBack()

Try
Dim i As Integer = A.EndInvoke(iresult)
Me.Invoke(New DisValue(AddressOf metext), i)
Catch ex As Exception

Finally

exv = False
End Try

End Sub

End Class
ncqingchuan1976 2010-05-22
  • 打赏
  • 举报
回复
两个窗体
form1 控件datagridview:datagridview1 ,button:OKbtn
form2 控件ProcessBar:PB
通过异步调用实现楼主的方法,且FORM2窗体不会出现未响应,代码如下:

Imports System.ComponentModel

Public Class Form1
Private m_Count As Integer '

Dim PrcentForm As Form2

Private Delegate Sub PrecentChangeDelegate(ByVal Precent As Integer)
Private Delegate Sub RunDelegate()
Private Delegate Sub CompleteDelegate()

Private Asyresult As IAsyncResult
Private List As BindingList(Of Datalist)

Private Run As RunDelegate
Public Sub DisPlayPrecent(ByVal Precent As Integer)
PrcentForm.PB.Value = Precent
If Precent = 100 Then
PrcentForm.Close()
End If
End Sub

Private Sub OKbtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OKbtn.Click

m_Count = 40000
PrcentForm = Form2
PrcentForm.Show()


Run = New RunDelegate(AddressOf LoadData) '异步调用数据加载过程
Asyresult = Run.BeginInvoke(New AsyncCallback(AddressOf CallBack), Nothing)

End Sub

Private Sub CallBack() '通过回调实现绑定
Run.EndInvoke(Asyresult)
Me.Invoke(New CompleteDelegate(AddressOf BindingData))

End Sub

Private Sub BindingData() '绑定到DataGridView1
Me.DataGridView1.DataSource = List
End Sub

Private Sub LoadData() '模拟加载数据
List = New BindingList(Of Datalist)
List.Clear()
Dim i As Integer = 0
While i <= m_Count
Dim T As New Datalist(i)
Me.Invoke(New PrecentChangeDelegate(AddressOf DisPlayPrecent), New Object() {CInt(i / m_Count * 100)})
List.Add(T)
i += 1
End While
End Sub
End Class


Public Class Datalist '数据模型
Private m_Number As Integer
Public ReadOnly Property Number()
Get
Return m_Number
End Get
End Property
Public Sub New(ByVal I As Integer)
m_Number = I
End Sub

End Class
足球中国 2010-05-22
  • 打赏
  • 举报
回复
Application.DoEvents()的意思楼主要看一下。
这个是vb那引过来的。
是把操作权交给系统。交给系统意味着。你的程序所分配的各种资源会重新分配。这样会导致你的程序变慢。
你可以用线程来处理这个东东。
sxmonsy 2010-05-22
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
skep99 2010-05-21
  • 打赏
  • 举报
回复
数据库加载到容器后再绑定 ListView
ListView用虚模式显示
2000行也就一眨眼,根本用不着ProgressBar来显示
水哥阿乐 2010-05-21
  • 打赏
  • 举报
回复
学习,帮顶
古今多少事 2010-05-21
  • 打赏
  • 举报
回复
那你用两个ListView,一个用来显示,真正加载数据的隐藏,加载完再显示。
设置窗体的代码解释 Imports System.Diagnostics Public Class 设置窗体 Private shutTime As String '关机时间的字符串 Private IsToday As Boolean = True '判断是否是今天的变量 Private delay As Integer '延时多少秒放关机 Private lastTime As Integer '关机的倒计时 Private action As String '关机或重启或注销 Private shellText As String '执行的命令字符串 Private firstShow As Boolean = True Private SysTime As Boolean = False Private autoHide As Boolean = True '启动自动隐藏 Private TotalData As New System.Diagnostics.PerformanceCounter("Network Interface", "Bytes Total/sec", "MS TCP Loopback interface") Private proTime As New System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total") '双击右下角的图标的响应事件 Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick If (Me.Visible = False) Then Me.Show() End If End Sub '重载窗体的关闭事件,使窗体隐藏 Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing e.Cancel = True '取消窗体的关闭动作 delayTime.Value = delay '还原delayTime控件的值 StrToItems() '还原ListBox的值 Me.Hide() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.SelectedIndex = 2 '设置默认选项 "每天" ComboBox2.SelectedIndex = 4 '设置默认选项 "关机" Timer1.Start() readReg() '读取存放在注册表的信息 StrToItems() '把字符串的信息读取到ListBox delayTime.Value = delay '把延时时间读取到delayTime控件 DateTimePicker1.Value = Today End Sub Private Sub 退出程序ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 退出程序ToolStripMenuItem.Click Me.Dispose() End Sub Private Sub 立即取消关机ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 立即取消关机ToolStripMenuItem1.Click Timer2.Stop() 取消窗体.Close() Shell("shutdown -a") Timer1.Start() End Sub Private Sub 设置关机计划ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 设置关机计划ToolStripMenuItem.Click If Me.Visible = False Then Me.Show() End If End Sub '点击确定按钮的事件处理 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click '判断是否要开机自动运行 If autoCheck.Checked Then 创建开机自动运行() Else 删除开机自动运行() End If If Me.HideCheck.Checked Then autoHide = True Else autoHide = False End If If Me.regCheck.Checked Then 禁止修改注册表() Else 取消禁止修改注册表() End If If Me.ManCheck.Checked Then 禁止使用任务管理器() Else 取消禁止使用任务管理器() End If If Me.SysTimeCheck.Checked Then SysTime = True Else SysTime = False End If '四舍五入delayTime控件的值 delay = Math.Round(delayTime.Value, MidpointRounding.AwayFromZero) Me.Hide() ItemsToStr() '把listBox的信息保存到字符串中 writeReg() '把字符串保存把注册表中 End Sub '取消按钮事件 Private Sub canelButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles canelButton.Click StrToItems() '还原ListBox的值 delayTime.Value = delay '还原delayTime控件的值 Me.Hide() End Sub '点击添加按钮 Private Sub addButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addButton.Click Dim tempStr As String = "" If ComboBox1.Items.Item(ComboBox1.SelectedIndex) = "指定日期" Then tempStr = DateTimePicker1.Value.ToShortDateString Else tempStr = ComboBox1.SelectedItem End If tempStr &= "," & CStr(Math.Round(hourNum.Value, MidpointRounding.AwayFromZero)) & ":" & CStr(Math.Round(minNum.Value, MidpointRounding.AwayFromZero)) & ":" & CStr(Math.Round(secNum.Value, MidpointRounding.AwayFromZero)) & "," Select Case ComboBox2.SelectedItem Case "打开网址" tempStr &= "打开网址" & "[" & TextBox1.Text.Replace(";", ";").Replace(":", ":") & "]" Case "提醒信息" tempStr &= "提醒信息" & "[" & TextBox1.Text.Replace(";", ";").Replace(":", ":") & "]" Case "打开文件" tempStr &= "打开文件" & "[" & TextBox1.Text.Replace(";", ";").Replace(":", ":") & "]" Case Else tempStr &= ComboBox2.SelectedItem End Select ListBox1.Items.Add(tempStr) End Sub '点击清除按钮 Private Sub clearButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearButton.Click ListBox1.Items.Clear() End Sub '把ListBox的值保存到字符串ShutTime Private Sub ItemsToStr() Dim i As Integer shutTime = "" For i = 0 To ListBox1.Items.Count - 1 '把ListBox中的各项连接到shutTime shutTime &= ListBox1.Items.Item(i) & ";" Next If shutTime "" Then '去除最后一个 ";" shutTime = Mid(shutTime, 1, shutTime.Length - 1) End If End Sub '把字符串ShutTime的值还原到ListBox Private Sub StrToItems() If shutTime "" Then '如果shutTime有保存信息 Dim temp() As String = shutTime.Split(";") 'temp字符串数组存放shutTime以";"分隔的各个字符子串 Dim t As String 't存放temp字符串数组的一项 ListBox1.Items.Clear() For Each t In temp If Not (Mid(t, 1, 2) = "今天" And Not IsToday) Then '如果今天还没过了 ListBox1.Items.Add(t) End If Next End If End Sub '读取注册表保存的信息 Private Sub readReg() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey Try key = Microsoft.Win32.Registry.LocalMachine subkey = key.OpenSubKey("SOFTWARE\AutoShutdown") shutTime = subkey.GetValue("time") delay = CInt(subkey.GetValue("delayTime")) autoHide = subkey.GetValue("autoHide") If (CStr(Today()) subkey.GetValue("day")) Then IsToday = False End If Catch ex As Exception shutTime = "" IsToday = True End Try End Sub Private Sub 禁止修改注册表() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser subkey = key.CreateSubKey("software\microsoft\windows\currentversion\policies\system") subkey.SetValue("disableregistrytools", 1) End Sub Private Sub 取消禁止修改注册表() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser subkey = key.CreateSubKey("software\microsoft\windows\currentversion\policies\system") subkey.SetValue("disableregistrytools", 0) End Sub Private Sub 禁止使用任务管理器() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser subkey = key.CreateSubKey("software\microsoft\windows\currentversion\policies\system") subkey.SetValue("DisableTaskMgr", 1) End Sub Private Sub 取消禁止使用任务管理器() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser subkey = key.CreateSubKey("software\microsoft\windows\currentversion\policies\system") subkey.SetValue("DisableTaskMgr", 0) End Sub '将需要保存的信息写入注册表 Private Sub writeReg() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine subkey = key.CreateSubKey("SOFTWARE\AutoShutdown") subkey.SetValue("time", shutTime) subkey.SetValue("day", CStr(Today())) subkey.SetValue("delayTime", CStr(delay)) subkey.SetValue("autoHide", autoHide) End Sub '点击删除按钮 Private Sub delButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delButton.Click Dim delIndex As Integer = ListBox1.SelectedIndex If delIndex -1 Then ListBox1.Items.RemoveAt(delIndex) End If End Sub '最小化窗体,这里指隐藏窗体 Private Sub 最小化ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 最小化ToolStripMenuItem.Click If Me.Visible = True Then StrToItems() delayTime.Value = delay Me.Hide() End If End Sub Private Sub 创建开机自动运行() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine subkey = key.CreateSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run") subkey.SetValue("定时自动关机", Application.ExecutablePath) End Sub Private Sub 删除开机自动运行() Dim key As Microsoft.Win32.RegistryKey, subkey As Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine subkey = key.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True) subkey.DeleteValue("定时自动关机") End Sub '关闭显示器 Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Public Const WM_SYSCOMMAND = &H112 Public Const SC_MONITORPOWER = &HF170 '关闭显示器 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 'Timer1的Tick事件,来监视现在的时间是否应该关机或别的了 Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Static nowTime As Date = Now updataMsg() If SysTime Then If (Now nowTime) Then Today = nowTime TimeOfDay = nowTime End If End If nowTime = nowTime.AddSeconds(1) If (shutTime "") Then Dim temp1() As String = shutTime.Split(";") 'temp1字符串数组存放shutTime以";"分隔的各个字符子串 Dim temp2() As String, i As Integer 'temp2字符串数组存放temp1某项的字符串以","或":"分隔的字符子串 Dim TimeOut As Boolean = False 'TimeOut存放是否时间到了 For i = 0 To temp1.Length - 1 temp2 = temp1(i).Split(New Char() {",", ":"}) If IsTimeOut(temp2) Then '判断时间是否到了 TimeOut = True action = temp2(4) '是"关机","注销","重启" End If Next If TimeOut Then '如果时间到 Select Case Mid(action, 1, 4) '根据action肯定命令字符串 Case "关闭计算" shellText = "shutdown -s -f -t 0" Case "重启计算" shellText = "shutdown -r -f -t 0" Case "注销用户" shellText = "shutdown -l -f -t 0" Case "关闭显示" SendMessage(Me.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 1) Exit Sub Case "锁定计算" shellText = "rundll32.exe user32.dll, LockWorkStation" Case "打开文件" System.Diagnostics.Process.Start(Mid(action, 6, action.Length - 6).Replace(":", ":")) Exit Sub Case "提醒信息" MsgBox(Mid(action, 6, action.Length - 6), , "提醒信息") Exit Sub Case "打开网址" System.Diagnostics.Process.Start(Mid(action, 6, action.Length - 6).Replace(":", ":")) Exit Sub End Select lastTime = delay '倒计时等于延时 Timer2.Start() '倒计时开始 取消窗体.Show() '倒计时窗口打开 Timer1.Stop() End If End If End Sub '判断时间是否到了 Private Function IsTimeOut(ByRef t() As String) As Boolean '如果时分秒都相等 If t(1) = CStr(Hour(Now())) And t(2) = CStr(Minute(Now()) And t(3) = Second(Now)) Then Select Case t(0) Case "每天" Return True Case "今天" Return True Case "每周二" If Weekday(Now) = FirstDayOfWeek.Tuesday Then Return True End If Case "每周六" If Weekday(Now) = FirstDayOfWeek.Saturday Then Return True End If Case "每周日" If Weekday(Now) = FirstDayOfWeek.Sunday Then Return True End If Case "每周三" If Weekday(Now) = FirstDayOfWeek.Wednesday Then Return True End If Case "每周四" If Weekday(Now) = FirstDayOfWeek.Thursday Then Return True End If Case "每周五" If Weekday(Now) = FirstDayOfWeek.Friday Then Return True End If Case "每周一" If Weekday(Now) = FirstDayOfWeek.Monday Then Return True End If Case "每周一至周五" If Weekday(Now) > FirstDayOfWeek.Sunday And Weekday(Now) < FirstDayOfWeek.Saturday Then Return True End If Case Else If (t(0) = Today.ToShortDateString) Then Return True End If End Select End If Return False End Function '刷新Msg控件 Private Sub updataMsg() Dim xingqi As String = "" Select Case Weekday(Now) Case 1 xingqi = "星期天" Case 2 xingqi = "星期一" Case 3 xingqi = "星期二" Case 4 xingqi = "星期三" Case 5 xingqi = "星期四" Case 6 xingqi = "星期五" Case 7 xingqi = "星期六" End Select msg.Text = "当前时间" & Now().ToLongDateString & " " & Now().ToLongTimeString & " " & xingqi & " CPU使用" & Format(proTime.NextValue, "#0") & "% 网速" & Format(TotalData.NextValue / 1024, "########0.00") & "KB/S" Me.NotifyIcon1.Text = msg.Text End Sub '倒计时处理事件 Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick If lastTime = 0 Then '如果时间到 Shell(shellText, AppWinStyle.Hide) 取消窗体.Label1.Text = "正在" & action Else 取消窗体.Label1.Text = "离" & action & "还有" & lastTime & "秒" '显示倒计时 lastTime -= 1 End If End Sub Private Sub 设置窗体_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown If autoHide Then Me.Hide() End If End Sub Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged Select Case ComboBox2.SelectedItem Case "打开网址" Button1.Visible = False TextBox1.Width = 299 TextBox1.Visible = True Case "提醒信息" Button1.Visible = False TextBox1.Width = 299 TextBox1.Visible = True Case "打开文件" Button1.Visible = True TextBox1.Width = 209 TextBox1.Visible = True Case Else Button1.Visible = False TextBox1.Visible = False End Select End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged If ComboBox1.SelectedItem = "指定日期" Then DateTimePicker1.Visible = True Else DateTimePicker1.Visible = False End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then TextBox1.Text = OpenFileDialog1.FileName End If End Sub Private Sub 立即关机ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 立即关机ToolStripMenuItem.Click Shell("shutdown -s -f -t 0") End Sub Private Sub 立即重启ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 立即重启ToolStripMenuItem.Click Shell("shutdown -r -f -t 0") End Sub Private Sub 立即注销ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 立即注销ToolStripMenuItem.Click Shell("shutdown -l -f -t 0") End Sub Private Sub 立即锁定计算机ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 立即锁定计算机ToolStripMenuItem.Click Shell("rundll32.exe user32.dll, LockWorkStation") End Sub Private Sub 立即关闭显示器ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 立即关闭显示器ToolStripMenuItem.Click SendMessage(Me.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 1) End Sub Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked System.Diagnostics.Process.Start("http://lywang.5d6d.com/space-uid-1.html") End Sub End Class

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧