Imports System.Data.OracleClient
Imports Oracle.ManagedDataAccess.Client

Public Class Form1

    Dim connIP As String
    Dim connPort As String
    Dim connSERVICENAME As String
    Dim connUserId As String
    Dim connPassword As String

    Dim conn As Oracle.ManagedDataAccess.Client.OracleConnection

    Private Sub btn_connect_Click(sender As Object, e As EventArgs) Handles btn_connect.Click

        Try

            connUserId = lbl_ID.Text
            connPassword = lbl_PW.Text
            connSERVICENAME = lbl_SERVICENAME.Text
            connIP = lbl_IP.Text
            connPort = lbl_PORT.Text

            Dim DB_STR As String = String.Format("User Id={0};Password={1};Data Source={2}:{3}/{4};", connUserId, connPassword, connIP, connPort, connSERVICENAME)
            Dim DT As DataTable = Nothing

            conn = New Oracle.ManagedDataAccess.Client.OracleConnection(DB_STR)
            conn.Open()

            If lbl_ID.Text = "" And lbl_PW.Text = "" And lbl_SERVICENAME.Text = "" Then
                MessageBox.Show("빈값이 있습니다. 확인필요")
            Else
                If conn IsNot Nothing Then
                    ListBox1.Items.Add(Now.ToString("yyyyMMdd HH:mm:ss") & "------ 연결성공하였습니다.")

                Else
                    ListBox1.Items.Add(Now.ToString("yyyyMMdd HH:mm:ss") & "------ 연결실패하였습니다.")
                    conn.Close()
                End If
            End If

        Catch ex As Exception
            MsgBox(ex.ToString)
            If conn Is Nothing Then
                conn.Close()
            End If
        End Try
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Try

            If RichTextBox1.Text = "" Then
                ListBox1.Items.Add(Now.ToString("yyyyMMdd HH:mm:ss") & "------ SQL구문이 없습니다.")
            End If

            Dim QueryStr As String = RichTextBox1.Text
            SearchTable(QueryStr)

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub


    Private da As Oracle.ManagedDataAccess.Client.OracleDataAdapter
    Private cb As Oracle.ManagedDataAccess.Client.OracleCommandBuilder
    Private ds As DataSet
    Private Sub SearchTable(queryStr As String)
        Try

            If queryStr.Substring(0, 1).ToUpper <> "S" Then
                MessageBox.Show(Now.ToString("yyyyMMdd HH:mm:ss") & "------ DB 접속오류")
                Return
            End If

            Dim sql As String = RichTextBox1.Text
            Dim cmd As New Oracle.ManagedDataAccess.Client.OracleCommand(sql, conn)
            cmd.CommandType = CommandType.Text

            da = New Oracle.ManagedDataAccess.Client.OracleDataAdapter(cmd)
            cb = New Oracle.ManagedDataAccess.Client.OracleCommandBuilder(da)
            ds = New DataSet

            da.Fill(ds)
            DataGridView1.DataSource = ds.Tables(0)

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

End Class

아쉬운건 richTextBox에 세미콜론이 들어가면 sql조회 에러발생

 

 

시도... 잡을... Finally 문 - Visual Basic

try/Catch/Finally 문에 Visual Basic 예외 처리를 사용하는 방법을 알아봅니다.

docs.microsoft.com

 

 

Function 문 - Visual Basic

자세한 정보: Function 문(Visual Basic)

docs.microsoft.com


위를 보면 End Function밑에 경고 밑줄이 있는것이 보인다

좌측의 경우 Function이라는 프로시저(?)는 리턴값이 있어야하는데 없어서 생기는 경고이다

 

하지만 우측의 경우 try와 catch문에 리턴값을 작성하더라도 경고 알림이 뜬다

그 이유는 try~catch문의 원리(?)를 알고있다면 이해하기 편한데

메소드가 실행될때 처음 들어오는 위치는 Try로 들어오게 된다 

그 후에 Try와 Catch의 사이의 구문들을 실행하다 오류 발생시 Catch문을 실행하게 되는데

 

Try문에서 리턴값을 실행하지만 리턴값이 실행되기전 오류가 발생해 catch문이 실행된다면 

function프로시저에서 필요한 리턴이 실행되지 않아 생기는 오류이다.

결국 임의로 아무 리턴 이름을 넣어줬지만 위의 형태와 비슷하게

try문과 catch문에 알맞게 리턴값을 넣어주면 경고알림이 사라지는 것을 확인할 수 있다.

 

 

 

좌) 자식    우) 부모

세팅파일에서 항목(기본 데이터를 가져와)을 부모폼의 내용을 넣어 저장하고 그 내용들을 자식폼으로 전달 / 새로고침


** 참조 해야함 **

 - 나 같은 경우 부모폼과 자식폼에서 세팅폼으로 값을 넣어주고 가지고 오기에 참조를 걸어주고

또 부모폼에서 자식폼으로 내용들을 바꾸어 주기에 부모폼에서 자식폼을 참조해 주었다.


새로고침 아이디어는 Stack Flow에서 다른 메소드를 빼내서 원하는 내을 넣도록 작성한다음 그 메소드를 불러내면 된다라는 내용을 사용해 구현

 

그랬을때 처음 입력한 값들로 열린 폼들이 존재한 그대로 새로운 값을 넣어 새로고침했을때

폼을 재실행 하지 않고 값이 변화되는 것을 볼 수 있다.


 

Setting
Public Class Setting
    Public name1, name2, name3, name4 As String
End Class

 

부모
Public Class 부모

    Public getDLLData As dll.info_Patient
    Public transData As test2.자식


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   '값전달

        getDLLData = New dll.info_Patient   '--세팅파일에 넣어야할 공간 필요
        transData = New test2.자식    '-- 세팅폼에 넣어야하는 값을 자식폼에 넣어야할 공간 필요

        getDLLData.name1 = TextBox1.Text
        getDLLData.name2 = TextBox2.Text
        getDLLData.name3 = TextBox3.Text
        getDLLData.name4 = TextBox4.Text

        transData.transName = getDLLData
        transData.Show()

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click   '새로고침

        getDLLData.name1 = TextBox1.Text
        getDLLData.name2 = TextBox2.Text
        getDLLData.name3 = TextBox3.Text
        getDLLData.name4 = TextBox4.Text

        'transData.transName = getDLLData    '---- 값을 보내주는 역할만 함 
        transData._Name()   '--- 값을 다시넣어주는 메소드 실행시킴

    End Sub

End Class

 

자식 - 이곳에서 _Name이라는 메소드로 값을 바꾸어준다
Public Class 자식

    Public transName As dll.info_Patient


    Private Sub Load(sender As Object, e As EventArgs) Handles MyBase.Load

        _Name()

    End Sub

    Public Sub _Name()

        TextBox1.Text = transName.name1
        TextBox2.Text = transName.name2
        TextBox3.Text = transName.name3
        TextBox4.Text = transName.name4
    End Sub

End Class

 

 


 

 

 

속성 프로시저 - Visual Basic

자세한 정보: 속성 프로시저(Visual Basic)

docs.microsoft.com

 

출처 : https://youtu.be/QXakJJHkz8k

버튼 1,2는 제외

요구사항 

좌측의 텍스트 박스에 값을 넣어  "값넣기"버튼을 누르면

해당 값들이 MessageBox에서 "이름 : 홍길동" 과 같은 모양으로 출력되며

들어간 값들을 "값보이게"라는 버튼을 눌렀을 때 MessageBox라는 모양으로 출력되도록

 

Public Class Form1

    Private _test As Setting2.test
    Private returnVal As String


    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        'textbox에 넣어 버튼을 누르면 값을 전송하고 받아 메세지 박스로 띄우기

        _test = New Setting2.test

        'private 호출  Name ,    age ,      address,    Tel 

        Dim newName As String = _test._name
        Dim newAge As Integer = _test._age
        Dim newAddress = _test._address
        Dim newTel As String = _test._tel

        newName = TextBox1.Text
        newAge = TextBox2.Text
        newAddress = TextBox3.Text
        newTel = TextBox4.Text

        'msgbaox  
        MessageBox.Show("이름 : " & newName & Chr(13) & "나이 : " & newAge & Chr(13) & "주소 :" & newAddress & Chr(13) & "전화 :" & newTel)

        returnVal = _test._recall(newName, newAge, newAddress, newTel)

    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        '값을 넣어주는 인자값

        Dim final() As String = Split(returnVal, "|")
        Dim data = New String() {"이름 : ", "나이 : ", "주소 : ", "번호 : "}


        For i As Integer = 0 To 3

            RichTextBox1.Text += data(i) & final(i) & Chr(13)

        Next

    End Sub

End Class
Public Class test

    Private Name As String
    Private age As Integer
    Private address As String
    Private Tel As String


    '프로포티 생성.
    Public Property _name As String
        Get
            Return Name
        End Get
        Set(value As String)
            Name = value
        End Set
    End Property

    Public Property _age As Integer
        Get
            Return age
        End Get
        Set(value As Integer)
            age = value
        End Set
    End Property

    Public Property _address As String
        Get
            Return address
        End Get
        Set(value As String)
            address = value
        End Set
    End Property

    Public Property _tel As String
        Get
            Return Tel
        End Get
        Set(value As String)
            Tel = value
        End Set
    End Property


    Public Function _recall(name As String, age As Integer, address As String, tel As String) As String

        Dim returnName As String = name
        Dim returnAge As String = CInt(age)
        Dim returnAddress As String = address
        Dim returnTel As String = tel

        Return returnName + "|" + returnAge + "|" + returnAddress + "|" + returnTel

    End Function


End Class
    Private Sub Btn_clear_Click(sender As Object, e As EventArgs) Handles Btn_clear.Click    ' 숫자 모두 삭제

        Label1.Text = "0"
        Label2.Text = ""
        'first_click = True

        Btn_equal.Focus()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click    ' 하나만 지우는거 

        If Label2.Text.Contains("=") Then   '계산이 완료되었을때
            Label2.Text = ""
        Else    '계산이 완료되지 않았다면
            If Label1.Text.Length > 0 Then ' 문자하나씩 삭제하기
                Label1.Text = Label1.Text.Remove(Label1.Text.Length - 1, 1)
                If (Label1.Text = "") Then  ' 문자를 모두 삭제되었을때 표시될 값
                    Label1.Text = "0"
                End If
            End If
        End If

        Btn_equal.Focus()
    End Sub
    Private Sub key_down(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
        Select Case e.KeyValue
            Case Keys.D1, Keys.NumPad1
                btn1_click(sender, e)
            Case Keys.D2, Keys.NumPad2
                btn2_click(sender, e)
            Case Keys.D3, Keys.NumPad3
                btn3_click(sender, e)
            Case Keys.D4, Keys.NumPad4
                btn4_click(sender, e)
            Case Keys.D5, Keys.NumPad5
                btn5_click(sender, e)
            Case Keys.D6, Keys.NumPad6
                btn6_click(sender, e)
            Case Keys.D7, Keys.NumPad7
                btn7_click(sender, e)
            Case Keys.D8, Keys.NumPad8
                btn8_click(sender, e)
            Case Keys.D9, Keys.NumPad9
                btn9_click(sender, e)
            Case Keys.D0, Keys.NumPad0
                btn0_click(sender, e)

            Case Keys.Add      '더하기
                btn_plus(sender, e)
            Case Keys.Subtract    '빼기
                btn_mins(sender, e)
            Case Keys.Divide  '나누기  
                btn_div(sender, e)
            Case Keys.Multiply    ' 곱하기
                btn_double(sender, e)

            Case Keys.X    'sin
                Button5_Click(sender, e)
            Case Keys.Y  'cos 
                Button4_Click(sender, e)
            Case Keys.Z    ' tan
                Button3_Click(sender, e)

            Case Keys.Decimal  ' 소수점
                btn_dot(sender, e)
            Case Keys.Delete   '지우기(전체)
                Btn_clear_Click(sender, e)
            Case Keys.End  '지우기(하나) 
                Button2_Click(sender, e)
            Case Keys.Enter, Keys.Return    '결과
                btn_ee(sender, e)
        End Select
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label1.Text = "0"
        Label2.Text = ""
        oper = "0"
        setFirstNum = False
    End Sub

 


참고자료(더있었는데 남아있는게 없음..)
 

javascript keycode 정리

가상 키보드 구현 중 필요했던 자료인 keycode 표. ※ 아무리 검색해도 나오지 않았던 국산 키보드의 한/영키는? 229 Key Code Key Code Key Code  backspace 8  d 68  numpad 7 103  tab 9  e 69  numpad 8..

whiterussian.tistory.com

 

  Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click    ' sin 계산
        If Label2.Text.Contains("=") Then
            'oper중이라면?
            If Label2.Text.Contains(oper) Then
                ' 기존결과값 위로올리기+ 앞에 sin을 사용했다는 표시 붙이기
                Label2.Text = answer
                Label2.Text = "Sin( " + Label2.Text + " )"
                ' sin 계산값은 아래에 위치
                Label1.Text = Label1.Text * Math.PI / 180  
                answer = Math.Sin(Label1.Text)  ' answer에 들어온 라디안값을 sin값으로 변환&계산
                Label1.Text = answer    'label1에 결과값 출력

            Else 'sin값을 바로 구한다면?
                ' 입력값 위로 올리기 + 앞에 sin 사용했다는 표시 붙이기
                Label2.Text = Label1.Text
                Label2.Text = "Sin( " + Label2.Text + " )"
                ' 결과값 아래에 위치
                Label1.Text = Label1.Text * Math.PI / 180
                answer = Math.Sin(Label1.Text)  ' answer에 들어온 라디안값을 sin값으로 변환&계산
                Label1.Text = answer    'label1에 결과값 출력
            End If
        Else
            MsgBox("확인을 눌러주세요")
        End If

        Btn_equal.Focus()
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click  ' cos 계산
        If Label2.Text.Contains("=") Then
            If Label2.Text.Contains(oper) Then
                Label2.Text = answer
                Label2.Text = "Cos( " + Label2.Text + " )"
                Label1.Text = Label1.Text * Math.PI / 180
                answer = Math.Cos(Label1.Text)
                Label1.Text = answer

            Else
                Label2.Text = Label1.Text
                Label2.Text = "Cos( " + Label2.Text + " )"
                Label1.Text = Label1.Text * Math.PI / 180
                answer = Math.Cos(Label1.Text)
                Label1.Text = answer
            End If
        Else
            MsgBox("확인을 눌러주세요")
        End If

        Btn_equal.Focus()
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click  ' tan 계산
        If Label2.Text.Contains("=") Then
            If Label2.Text.Contains(oper) Then
                Label2.Text = answer
                Label2.Text = "Tan( " + Label2.Text + " )"
                Label1.Text = Label1.Text * Math.PI / 180
                answer = Math.Tan(Label1.Text)
                Label1.Text = answer

            Else
                Label2.Text = Label1.Text
                Label2.Text = "Tan( " + Label2.Text + " )"
                Label1.Text = Label1.Text * Math.PI / 180
                answer = Math.Tan(Label1.Text)
                Label1.Text = answer
            End If
        Else
            MsgBox("확인을 눌러주세요")
        End If

        Btn_equal.Focus()
    End Sub

 


참고자료

 

c#에서의 Math.Cos(), Math.Cos()

c# 에서 Cos 함수와 Sin 함수 전달인자 각도는 라디안 형태.. dAngle = dDegree * Math.PI / 180; /...

blog.naver.com

라디안값으로 변환해야지 제대로된 값 나옴

완벽하지는 않지만 5/2일부터 5/13일까지 나름 열심히 만들어 본 계산기

Public Class Form1
    Dim first As Double = 0 '첫번째수
    Dim second As Double = 0 '두번째수
    Dim answer As Double = 0  '정답
    Dim oper As String = "0"  '연산자 기억

    Dim heyNum As Double = 0 '자릿수 표시를 위한 변수 => 사용안함

    Dim oper_check As Boolean = False '연산자 변경을 위한 검사 변수 
    Dim setFirstNum As Boolean = False '첫번째 수 입력 후 Label 초기화용 변수
    Dim result As Boolean = False

    Private Sub btn0_click(sender As Object, e As EventArgs) Handles Btn_0.Click
        If Label1.Text = "0" Then   '초기값이 없을때
            Label1.Text = "0"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "0"
        Else
            Label1.Text = Label1.Text + "0" '첫값을 입력할때
        End If
    End Sub

    Private Sub btn1_click(sender As Object, e As EventArgs) Handles Btn_1.Click
        If Label1.Text = "0" Then
            Label1.Text = "1"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "1"
        Else
            Label1.Text = ""
            Label1.Text = Label1.Text + "1"
        End If

    End Sub

    Private Sub btn2_click(sender As Object, e As EventArgs) Handles Btn_2.Click
        If Label1.Text = "0" Then
            Label1.Text = "2"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "2"
        Else
            Label1.Text = Label1.Text + "2"
        End If
    End Sub

    Private Sub btn3_click(sender As Object, e As EventArgs) Handles Btn_3.Click
        If Label1.Text = "0" Then
            Label1.Text = "3"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "3"
        Else
            Label1.Text = Label1.Text + "3"
        End If
    End Sub

    Private Sub btn4_click(sender As Object, e As EventArgs) Handles Btn_4.Click
        If Label1.Text = "0" Then
            Label1.Text = "4"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "4"
        Else
            Label1.Text = Label1.Text + "4"
        End If
    End Sub

    Private Sub btn5_click(sender As Object, e As EventArgs) Handles Btn_5.Click
        If Label1.Text = "0" Then
            Label1.Text = "5"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "5"
        Else
            Label1.Text = Label1.Text + "5"
        End If
    End Sub

    Private Sub btn6_click(sender As Object, e As EventArgs) Handles Btn_6.Click
        If Label1.Text = "0" Then
            Label1.Text = "6"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "6"
        Else
            Label1.Text = Label1.Text + "6"
        End If
    End Sub

    Private Sub btn7_click(sender As Object, e As EventArgs) Handles Btn_7.Click
        If Label1.Text = "0" Then
            Label1.Text = "7"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "7"
        Else
            Label1.Text = Label1.Text + "7"
        End If
    End Sub

    Private Sub btn8_click(sender As Object, e As EventArgs) Handles Btn_8.Click
        If Label1.Text = "0" Then
            Label1.Text = "8"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "8"
        Else
            Label1.Text = Label1.Text + "8"
        End If
    End Sub

    Private Sub btn9_click(sender As Object, e As EventArgs) Handles Btn_9.Click
        If Label1.Text = "0" Then
            Label1.Text = "9"
        ElseIf setFirstNum = True Then
            Label1.Text = ""
            setFirstNum = False
            Label1.Text = Label1.Text + "9"
        Else
            Label1.Text = Label1.Text + "9"
        End If

    End Sub

    Private Sub btn_dot(sender As Object, e As EventArgs) Handles Button10.Click
        If Label1.Text.Contains(".") Then
        Else
            Label1.Text = Label1.Text + "."
        End If
    End Sub

    Private Sub btn_plus(sender As Object, e As EventArgs) Handles Button14.Click

        oper = "+" '결과 함수에서 if문에 사용될 기호 정의
        first = Val(Label1.Text)

        '첫번째로 입력된 숫자를 + 버튼 클릭 이후의 숫자와 더함. 
        Label2.Text = CStr(first) + oper '입력했던 값 Label2에 출력 / 계산 완료 이후는 Result에서 처리
        Label1.Text = CStr(first) '입력했던 값 유지
        setFirstNum = True '첫번 째 수 입력 후 Label 초기화용 변수
        'oper_check = True '연산자 선택 True

        'if oper_check = true then '연산자가 선택되었고,
        '    if second = 0 then 'second이 입력된상태가 아니며
        '        second = label1.text 'second이 label1.text에 입력된 후에는 label1.text값을 second에 저장
        '    end if
        'end if

        If oper_check = False Then
            If Label2.Text.Contains("+") Then
                ' +선택시 아무동작하지않음
            ElseIf Label2.Text.Contains("-") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1) '기존의 부호를 지운다
                Label1.Text = Label2.Text  '다른부호에서 작업할 수 있게 문자를 원래대로 옮긴다.
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("*") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("/") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            Else
                first = Label1.Text  '첫 출력위치
                Label2.Text = Label1.Text ' 연산자 클릭시 첫값의 이동
                Label2.Text = Label2.Text + " " + oper  ' label2에서 나타낼표현
                Label1.Text = ""  '처음 입력했던 위치에서 이동 후 기존 위치의 값의 초기
            End If

        End If

        Btn_equal.Focus()
    End Sub

    Private Sub btn_mins(sender As Object, e As EventArgs) Handles Button13.Click

        oper = "-" '결과 함수에서 if문에 사용될 기호 정의
        first = Val(Label1.Text)

        Label2.Text = CStr(first) + oper
        Label1.Text = CStr(first)

        'oper_check = True
        setFirstNum = True

        If oper_check = False Then
            If Label2.Text.Contains("-") Then

            ElseIf Label2.Text.Contains("+") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("*") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("/") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            Else
                first = Label1.Text
                Label2.Text = Label1.Text
                Label2.Text = Label2.Text + " " + oper
                Label1.Text = ""
            End If
        End If

        Btn_equal.Focus()
    End Sub

    Private Sub btn_double(sender As Object, e As EventArgs) Handles Button18.Click
        oper = "*"
        first = Val(Label1.Text)

        Label2.Text = CStr(first) + oper
        Label1.Text = CStr(first)

        setFirstNum = True

        If oper_check = False Then
            If Label2.Text.Contains("*") Then
            ElseIf Label2.Text.Contains("+") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("-") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("/") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            Else
                first = Label1.Text
                Label2.Text = Label1.Text
                Label2.Text = Label2.Text + " " + oper
                Label1.Text = ""
            End If
        End If

        Btn_equal.Focus()
    End Sub

    Private Sub btn_div(sender As Object, e As EventArgs) Handles Button17.Click

        oper = "/" '결과 함수에서 if문에 사용될 기호 정의
        first = Val(Label1.Text)

        Label2.Text = CStr(first) + oper
        Label1.Text = CStr(first)
        setFirstNum = True

        If oper_check = False Then
            If Label2.Text.Contains("/") Then
            ElseIf Label2.Text.Contains("+") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("-") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            ElseIf Label2.Text.Contains("*") Then
                Label2.Text = Label2.Text.Remove(Label2.Text.Length - 1, 1)
                Label1.Text = Label2.Text
                Label2.Text = Label2.Text + oper
                Label1.Text = ""
            Else
                first = Label1.Text
                Label2.Text = Label1.Text
                Label2.Text = Label2.Text + " " + oper
                Label1.Text = ""
            End If
        End If

        Btn_equal.Focus()
    End Sub

    Private Sub btn_ee(sender As Object, e As EventArgs) Handles Btn_equal.Click
        second = Val(Label1.Text)   ' 두번째 값 label1에 출력

        If Label2.Text.Contains("0") Then
        ElseIf oper = "+" Then
            Label2.Text = CStr(first) + oper + CStr(second) + " =" 'Label2 에 표시되는것 / second은 +버튼에서 받아온 값

            first = first + second '가산역할
            Label1.Text = first '최종 결과값 표기
            oper = "0"
            'first = 0 '삭제해야 가산이 작동됨. -> 구런데 지금은 안됨
            'oper_check = False

        ElseIf oper = "-" Then
            Label2.Text = CStr(first) + oper + CStr(second) + " ="

            first = first - second
            Label1.Text = CStr(first)
            oper = "0"
            oper_check = False

        ElseIf oper = "*" Then
            Label2.Text = CStr(first) + oper + CStr(second) + " ="

            first = first * second
            Label1.Text = first
            oper = "0"

        ElseIf oper = "/" Then
            Label2.Text = CStr(first) + oper + CStr(second) + " ="

            first = first / second
            Label1.Text = first
            oper = "0"
        End If

    End Sub
  End Class

+) 키보드의 함수를 각각 제어하기 위해 하나하나 숫자나 연산자에 대한 카테고리를 만들었지만

이러한 경우가 아니라면 핸들러와 키를 사용해서 코드들을 간결하고 단순하게 만들수도 있다.

 

!) 아쉬운점

1. 계산이 연산자만으로 계속해서 더해지지 못한다.(stack)

2. 엔터로 두번째로 입력한 값으로 계속되서 연산되지 못한다.

3. 자리수를 표현하기 실패(실행했을때 표현은 가능하지만 수가 변하고 소수점 계산에 실패함

 

종류 이름 설명
속성 Items 리스트 박스에 나타날 항목 추가/제거
SelectionMode 여러 항목의 선택 가능 여부 설정
One : 하나 선택
MultiSimple : 마우스 클릭하면 다중 선택, 재선택은 선택 해제 됨
MultiExtended : 마우스 드래그/ ctrl이나 shift 클릭시 다중선택
Sorted 원하는 순으로 정렬
true : 오름차순 정렬 / false : 입력순대로 정렬
Enabled 리스트박스 사용 여부 설정
true : 사용 / false : 사용불가
메서드 Add 목록에 문자열 추가
Remove 인덱스 번호 사용해 항목 삭제
Refresh 목록 최근 입력한 항목으로 수정
Clear 모든 목록 삭제

 

리스트박스 예제(1)

순서대로 one MultiSimple MultiExtended

리스트박스 예제(2)

아래 코드로 실행했을때 이런 폼이 생성되었다.

아이러니한건 remove를 사용했는데 왜 listbox1에는 사라지지 않는것인가..

listbox2에 추가된 목록들은 잘 작동되는데..

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListBox1.Items.Add("팽이버섯")
        ListBox1.Items.Add("참치")
        ListBox1.Items.Add("상추")
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ListBox1.Items.Add(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ListBox2.Items.Add(ListBox1.Text)
        ListBox1.Items.Remove(ListBox2.Text)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox2.Items.Remove(ListBox1.Text)
        ListBox1.Items.Add(ListBox2.Text)
    End Sub
End Class

 

 

속성 설명
DropDownStyle 콤보박스 형태 설정
DropDown : 일반적인 콤보박스 생성. 드롭다운 목록을 이용하여 항목 선택/직접입력가능
Simple : 일반 텍스트박스처럼 보임
DropDownList : 직접 입력하지 못하고 드롭다운 목록에서만 선택 
콤보박스 예제

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With ComboBox1
            .Items.Add("내일")
            .Items.Add("오늘")
            .Items.Add("모래")
            .Items.Add("어제")
            .Text = .Items(1)
        End With
        With ComboBox2
            .Items.Add("맑음")
            .Items.Add("흐림")
            .Items.Add("비내림")
            .Items.Add("호우주의보")
            .Items.Add("열대아")
            .Items.Add("폭설")
            .Text = .Items(0)
        End With
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(ComboBox1.Text & TextBox1.Text & "날씨는" & ComboBox2.Text & "입니다 ")
    End Sub
End Class

+ Recent posts