FileSystemWatcher类的使用----- vb2010实例 磁盘与文件夹监视器

        此实例包含FileSystemWatcher类,clListBox背景透明,类的重写,设置控件可以用透明背景Transparent,从不是创建控件“richTextBox1”的线程访问它,利用线程的解决方案,还有无边窗体移动方法,任务栏右侧通知显示图标方法等,值得新手研究。

 



Public Class Form1
    Private IsFormBeingDragged As Boolean = False '拖运窗体
    Private MouseDownX As Integer '按下时的x坐标
    Private MouseDownY As Integer '按下时的y坐标
    Dim fs As New IO.FileSystemWatcher


    ''' <summary>
    ''' 获取要监视的路径
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Bt_Open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Open.Click
        Dim fb As New FolderBrowserDialog '建一个打开文件夹的实例化对象
        If fb.ShowDialog = Windows.Forms.DialogResult.OK Then '如果打开了文件夹并返回为OK为真
            fs.Path = fb.SelectedPath '获取返回的路径
            Bt_Strat.Enabled = True '开启按钮可用
        End If
    End Sub

    ''' <summary>
    ''' 开启文件夹监视
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Bt_Strat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Strat.Click
        fs.EnableRaisingEvents = True '开启文件夹监视
        Bt_Stop.Enabled = True '停止按钮可用
        Bt_Strat.Enabled = False '启动按钮不可用
        Label1.Text = "服务启动"



        AddHandler fs.Created, AddressOf OnCreate '定义文件创建的事件委托
        AddHandler fs.Deleted, AddressOf Ondeleted '定义删除文件的事件委托
        AddHandler fs.Renamed, AddressOf OnRename '定义文件被重命名的事件委托
    End Sub

    ''' <summary>
    ''' 关闭文件监控
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Bt_Stop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Stop.Click
        fs.EnableRaisingEvents = False
        Bt_Open.Enabled = True
        Bt_Strat.Enabled = False
        Label1.Text = "服务停止"
    End Sub

    ''' <summary>
    ''' 文件创建时触发
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub OnCreate(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs)
        SetClListBox1("时间:" & My.Computer.Clock.LocalTime & "  " & e.Name & " 动作:创建   路径: " & e.FullPath)
        SetText(vbNewLine & ("时间: " & My.Computer.Clock.LocalTime & "  " & e.Name & " 动作:创建  路径: " & e.FullPath))
    End Sub

    ''' <summary>
    ''' 文件被删除时引发
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Ondeleted(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs)
        SetClListBox1("时间: " & My.Computer.Clock.LocalTime & " " & e.Name & " 动作:删除   路径:" & e.FullPath)
        SetText(vbNewLine & ("时间: " & My.Computer.Clock.LocalTime & " " & e.Name & " 动作:删除   路径:" & e.FullPath))
    End Sub

    ''' <summary>
    ''' 文件被重命名时引发
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub OnRename(ByVal sender As Object, ByVal e As System.IO.RenamedEventArgs)
        SetClListBox1("时间: " & My.Computer.Clock.LocalTime & "  " & e.OldName & "  动作:更改名称:  " & e.Name)
        SetText(vbNewLine & ("时间: " & My.Computer.Clock.LocalTime & "  " & e.OldName & "  动作:更改名称: " & e.Name))
    End Sub

#Region "线程委托"
    Private Delegate Sub SetTextCallback(ByVal text As String) '定义的委托声明
    '在给textBox1.text赋值的地方调用以下方法即可
    Private Sub SetClListBox1(ByVal text As String)
        ' InvokeRequired需要比较调用线程ID和创建线程ID
        ' 如果它们不相同则返回true
        If Me.ClListBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetClListBox1)
            Me.Invoke(d, New Object() {text})
        Else
            ClListBox1.Items.Add(text)
        End If
    End Sub

    Private Delegate Sub SetRichTextBox1Callback(ByVal text As String) '定义的委托声明
    ''' <summary>
    ''' 定义设置RichTextBox1文本的委托,因为监视不在一个线程上
    ''' </summary>
    ''' <param name="text"></param>
    ''' <remarks></remarks>
    Private Sub SetText(ByVal text As String)
        ' InvokeRequired需要比较调用线程ID和创建线程ID
        ' 如果它们不相同则返回true
        If Me.RichTextBox1.InvokeRequired Then
            Dim d As New SetRichTextBox1Callback(AddressOf SetText)
            Me.Invoke(d, New Object() {text})
        Else
            RichTextBox1.AppendText(text)
        End If
    End Sub

    'Private Delegate Sub SetRichTextBox1Callback(ByVal text As String)
    'Private Sub SetText(ByVal text As String)
    '    If Me.richTextBox1.InvokeRequired Then
    '        Dim stcb As New SetRichTextBox1Callback(AddressOf SetText)
    '        Me.Invoke(stcb, New Object() {text})
    '    Else
    '        Me.richTextBox1.Text = text
    '    End If
    'End Sub


#End Region


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false
    End Sub


    ''' <summary>
    ''' 定义的时钟,间隔为10,监视Tb_Rt中文本的值
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label7.Text = My.Computer.Clock.LocalTime '获取计算机的本地时间
        If RichTextBox1.TextLength = 0 Then '获取控件中文本的长度
            Button4.Enabled = False '文本框中有文本才能倒出
        Else
            Button4.Enabled = True
        End If
    End Sub

#Region "鼠标拖动窗体"

    ''' <summary>
    ''' 窗体鼠标按下事件,写鼠标拖动窗体,按下鼠标左键,
    ''' 捕获鼠标事件,得到按下时的x、y坐标
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then '如果按下的键为鼠标左键
            IsFormBeingDragged = True '窗体拖动为真
            MouseDownX = e.X '获取鼠标在产生鼠标事件时的x坐标
            MouseDownY = e.Y
        End If

    End Sub

    ''' <summary>
    ''' 按下鼠标移动,计算起点和终点坐标,拖动窗体
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If IsFormBeingDragged Then '如果拖动窗体为真
            Dim TEMP As Point = New Point '定义平面上的点
            TEMP.X = Me.Location.X + (e.X - MouseDownX)
            TEMP.Y = Me.Location.Y + (e.Y - MouseDownY)
            Me.Location = TEMP '获取或设置窗体左上角的点
        End If
    End Sub


    ''' <summary>
    ''' 鼠标抬起事件,结束窗体移动
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Form1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        If e.Button = MouseButtons.Left Then '如果抬起的是鼠标左键
            IsFormBeingDragged = False
        End If
    End Sub

#End Region

    ''' <summary>
    ''' 单击最小化按钮时,最小化窗体,在任务栏右边通知上显示图标
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Bt_min_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_min.Click
        Me.WindowState = FormWindowState.Minimized  '设置窗体为最小化
        If Me.WindowState = FormWindowState.Minimized Then
            Me.Hide() '隐藏窗体
            NotifyIcon1.Visible = True '在通知栏上显示图标
        End If
    End Sub

    ''' <summary>
    ''' 处理--双击任务栏图标时显示窗体
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub ToolStrip1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ToolStrip1.MouseDoubleClick
        Me.Show() '显示窗体
        Me.WindowState = FormWindowState.Normal '以标准模式显示窗体
        NotifyIcon1.Visible = False '不在任务栏右边的通知栏上显示图标
    End Sub


    ''' <summary>
    ''' 关闭窗体
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Bt_Close_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Close.Click
        Me.Close() '关闭窗体
    End Sub

    ''' <summary>
    ''' 倒出监控到的日志
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        RichTextBox1.SaveFile("C:\TT.RTF")
    End Sub

   
End Class

源码下载:https://download.csdn.net/download/jinwei29/11958586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值