이게 어쩌다 이렇게 된건지는 모르겠지만 이번에도 자세한 설명은 생략한다. 아무튼, 원하는대로 프로그램을 만들었다. 이것으로 레이저 한번 쏠 때마다 몇번 쐈는지 기록해 주는 프로그램을 작동시킬 사람 1명을 "절약"할 수 있게 되었다. 날림으로 만든 코드이며 매우 쉬우므로 소스코드 분석은 각자 해보기 바란다. 이런 프로그램을 다른데서 쓸 사람이 있을지는 모르겠지만 만약 사용하고 싶다면, 개인적인 용도로는 마음껏 써도 되지만 어딘가에 공표할 때에는 snowall의 명시적 허락을 받고 사용하길 바란다. (저작권료를 따로 청구하지는 않을 것이다.)


Public Class frmMain
    Private c As Integer = 0
    Private today As Integer = 0
    Private beginning As Integer = 0
    Private autoflag As Boolean = False
    Private diaflag As Boolean = False
    Private remoteFlag As Boolean = False
    Private filenumber As Integer = 0
    Private file As String()

    Public Property intcount() As Integer
        Get
            Return c
        End Get
        Set(ByVal value As Integer)

            If value < 0 Then
                c = 0
            Else
                c = value
            End If
            counting()
        End Set
    End Property

    Private Sub counting()
        txtCount.Text = intcount.ToString
        txtPresent.Text = (intcount - 1).ToString
        'txtToday.Text = today.ToString
        System.IO.File.WriteAllText(My.Application.Info.DirectoryPath & "\APRICounter.txt", txtCount.Text)
    End Sub

    Private Sub up()
        intcount += 1
        txtToday.Text = CInt(txtToday.Text) + 1
    End Sub

    Private Sub down()
        intcount -= 1
        txtToday.Text = CInt(txtToday.Text) - 1
    End Sub

    Private Sub reset()
        intcount = 0
        beginning = intcount
        txtToday.Text = 0
    End Sub

    Private Sub setting()
        Try
            intcount = CInt(txtSetCount.Text)
            beginning = intcount
            txtToday.Text = 0
        Catch
        End Try
    End Sub


    Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click
        reset()
    End Sub

    Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click
        up()
    End Sub

    Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click
        down()
    End Sub

    Private Sub btnSet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSet.Click
        setting()
    End Sub

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            intcount = System.IO.File.ReadAllText(My.Application.Info.DirectoryPath & "\APRICounter.txt")
            beginning = intcount
            txtToday.Text = "0"
        Catch
            intcount = 0
        End Try
        txtDate.Text = System.DateTime.Today
    End Sub

    Private Sub btnFontSize_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFontSize.Click
        Dim fnt As Font
        fnt = New Font(System.Drawing.FontFamily.GenericSansSerif, CInt(txtFontSize.Text))
        txtCount.Font = fnt
    End Sub

    Private Sub btnAuto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAuto.Click
        If diaflag Or remoteFlag Then
            If autoflag Then
                btnAuto.Text = "Auto" & vbCr & "count"
            Else
                btnAuto.Text = "Stop" & vbCr & "count"
            End If

            autoflag = Not (autoflag)
            Timer1.Enabled = autoflag
            Exit Sub
        End If

        If Not diaflag Then
            MsgBox("First, Select auditing folder!")
            Exit Sub
        End If

        If Not remoteFlag Then
            MsgBox("First, Select auditing file!")
            Exit Sub
        End If
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If diaflag Then

            If filenumber <> System.IO.Directory.GetFiles(diaFolder.SelectedPath).Length Then
                file = System.IO.Directory.GetFiles(diaFolder.SelectedPath)
                txtCount.Text = CInt(filenameWashing(file, diaFolder.SelectedPath.Length)) + 1
                Me.txtPresent.Text = CInt(filenameWashing(file, diaFolder.SelectedPath.Length))
                txtToday.Text = CInt(txtToday.Text) + 1

            Else
                Exit Sub
            End If
            filenumber = System.IO.Directory.GetFiles(diaFolder.SelectedPath).Length
        End If
        If remoteFlag Then
            Dim n As New System.IO.StreamReader(OpenFileDialog1.FileName)
            Dim k As String
            k = n.ReadLine
            If txtToday.Text <> k Then
                txtPresent.Text = txtCount.Text
                txtCount.Text = CInt(txtCount.Text) + 1
                txtToday.Text = k 'CInt(txtToday.Text) + 1
            End If
            n.Close()
            n.Dispose()

        End If

        System.IO.File.WriteAllText(My.Application.Info.DirectoryPath & "\APRICounter.txt", txtCount.Text)
    End Sub

    Private Sub btnDir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDir.Click
        If diaFolder.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
            flagClean()
            diaflag = True
        End If
    End Sub

    Private Sub btnSetToday_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetToday.Click
        txtToday.Text = txtSetCount.Text
    End Sub

    Private Function filenameWashing(ByVal filename() As String, ByVal baseLength As Integer) As String
        'Dim f As String
        Dim files As Integer()
        ReDim files(filename.Length)
        Dim i As Integer

        Dim regexPattern As String = "[^0-9]"
        Dim regex As New System.Text.RegularExpressions.Regex(regexPattern)
        For i = 0 To filename.Length - 1
            files(i) = CInt(regex.Replace(filename(i).Substring(baseLength, filename(i).Length - 4 - baseLength), regexPattern, "")) 'CAUTION!!! This code will work WRONG
        Next
        Array.Sort(files)
        Return files(files.Length - 1)
    End Function

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub

    Private Sub btnRemote_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemote.Click
        If OpenFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
            flagClean()
            remoteFlag = True
            txtToday.Text = 0

        End If

    End Sub

    Private Sub flagClean()
        remoteFlag = False
        diaflag = False
        autoflag = False
    End Sub
End Class


by snowall 2010. 7. 3. 18:59