2023.11.22 TIL(VB강의2)

SaGo_MunGcci·2023년 11월 22일
0

VB

목록 보기
2/8

Today do list

⦁ 간단한 출력문
⦁ 계산기



TIL

Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Public Class Form1
	'변수 선언하는 방법: Dim 변수명 자료형을 As 뒤에 선언한다.
    Dim A As Integer
    Dim B As String
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        SetControl()
    End Sub

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
        'SetControl()
        'SetEvent()
    End Sub

    Private Sub SetControl()
        'MessageBox.Show("setControl")
        txtInput.MaxLength = 1


    End Sub

    Private Sub SetEvent()
        'MessageBox.Show("setEvent")

    End Sub


    'AndAlso는 VB.NET에서 사용되는 논리 연산자 중 하나입니다.
    '이 연산자는 논리 And 연산을 수행하며,
    '첫 번째 조건이 거짓이면 두 번째 조건을 평가하지 않습니다.

    '간단히 말하면, 첫 번째 조건이 거짓이면 두 번째 조건을 확인하지 않고
    '전체 표현식을 거짓으로 평가합니다.
    '이는 두 조건 중 하나라도 거짓이면 전체 표현식이 거짓이라는 논리를 반영합니다.
    '이를 "short-circuit" 논리 연산이라고도 합니다

    '숫자만 입력되게 해줌
    Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtInput.KeyPress
        ' 입력된 키가 숫자인지 확인
        If Not Char.IsDigit(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar) Then

            MessageBox.Show("숫자를 입력해주세요")
            ' 숫자가 아니면 입력을 무시
            e.Handled = True

        ElseIf e.KeyChar = "0" Or e.KeyChar = "6" Or e.KeyChar = "7" Or e.KeyChar = "8" Or e.KeyChar = "9" AndAlso txtInput.Text.Length = 0 Then
            MessageBox.Show("1~5만 입력해주세요")
            ' 첫 번째 자리에 0은 허용하지 않음
            e.Handled = True

        End If
    End Sub

    Private Sub txtInput_TextChanged(sender As Object, e As EventArgs) Handles txtInput.TextChanged
        If txtInput.Text = Nothing Then

        Else
            A = Integer.Parse(txtInput.Text)
        End If


    End Sub

    Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click

        Label2.Text = Message(A)

    End Sub

    Private Function Message(A As Integer) As String

        If A = 1 Then
            B = "1을 선택하셨습니다."
        End If

        If A = 2 Then
            B = "2를 선택하셨습니다."
        End If

        If A = 3 Then
            B = "3을 선택하셨습니다."
        End If

        If A = 4 Then
            B = "4를 선택하셨습니다."
        End If

        If A = 5 Then
            B = "5를 선택하셨습니다."
        End If

        Return B

    End Function

End Class

계산기


Public Class Form1

    'label textalign -> 라벨의 위치를 정할수 있다.
    'Form 속성의 opacity -> form 대화상자의 투명도를 조절할수 있다.

    'Enum 클래스 선언
    '변수들의 번호는 위에서부터 0,1,2가 된다.
    Enum State
        EndCalc
        DuringCalc
        Inputting
    End Enum

    Enum Sign
        None
        Division
        Multipication
        Subtraction
        Addition
    End Enum


    '연산 부호
    Dim curSign As Integer = Sign.None

    '0 = 계산이 끝난 상태
    '1 = 계산 중
    '2 = 숫자 입력 중
    '아래와 같이 As 뒤에 enum클래스를 선언하면 숫자가 아니라 해당 번호에
    '해당하는 value값이 나온다.
    Dim curState As State = State.EndCalc

    Dim num1 As Integer
    Dim num2 As Integer

    'boolean의 기본값은 false이다!!!!!
    Dim isNum1 As Boolean
    Dim isNum2 As Boolean

    '숫자입력 메서드
    Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn0.Click, btn1.Click, btn2.Click, btn3.Click, btn4.Click, btn5.Click, btn6.Click, btn7.Click, btn8.Click, btn9.Click

        'Label1.Text = sender.Name

        If curState = 0 Then
            curSign = 0
            curState = 0
            num1 = 0
            num2 = 0
            isNum1 = False
            isNum2 = False
            lblMain.Text = Nothing
            lblSign.Text = Nothing
        ElseIf curState = 1 Then '계산중
            lblMain.Text = Nothing
        End If

        Select Case sender.Name
            Case btn0.Name
                lblMain.Text += "0"
            Case btn1.Name
                lblMain.Text += "1"
            Case btn2.Name
                lblMain.Text += "2"
            Case btn3.Name
                lblMain.Text += "3"
            Case btn4.Name
                lblMain.Text += "4"
            Case btn5.Name
                lblMain.Text += "5"
            Case btn6.Name
                lblMain.Text += "6"
            Case btn7.Name
                lblMain.Text += "7"
            Case btn8.Name
                lblMain.Text += "8"
            Case btn9.Name
                lblMain.Text += "9"
            Case Else

        End Select

        curState = 2
        lblCurState.Text = curState.ToString()
    End Sub
    '연산 메서드
    Private Sub btnCulculator_Click(sender As Object, e As EventArgs) Handles btnDivision.Click, btnMultipication.Click, btnSubtraction.Click, btnAddition.Click
        '(임시)
        '1= 나누기 버튼 클릭됩
        '2= 곱하기 버튼 클릭됩
        '3= 빼기 버튼 클릭됩
        '4= 더하기 버튼 클릭됩

        If isNum1 = False Then
            num1 = Val(lblMain.Text)
            isNum1 = True
        ElseIf isNum2 = False Then
            num2 = Val(lblMain.Text)
            isNum2 = True
        End If

        Select Case sender.Name
            Case btnDivision.Name
                curSign = 1
                lblSign.Text += "÷"

            Case btnMultipication.Name
                curSign = 2
                lblSign.Text += "×"

            Case btnSubtraction.Name
                curSign = 3
                lblSign.Text += "-"

            Case btnAddition.Name
                curSign = 4
                lblSign.Text += "+"

            Case Else

        End Select

        curState = 1
        lblCurState.Text = curState.ToString()
    End Sub

    '연산결과 출력메서드
    Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
        '일단 계산하는 숫자는 12로 고정(임시로)

        'Val함수 : 문자열에서 문자를 만나기 전까지 숫자를 뽑아서 Interger형으로 변환시켜준다. 
        '공백이 있어도 상관없다.
        '1 2 안녕하세요  3 4 -> 12출력
        If isNum1 = False Then
            num1 = Val(lblMain.Text)
            isNum1 = True
        ElseIf isNum2 = False Then
            num2 = Val(lblMain.Text)
            isNum2 = True
        End If

        Select Case curSign
            Case 1
                'lblMain.Text = 1 / 2
                num1 = num1 / num2
            Case 2
                'lblMain.Text = 1 * 2
                num1 = num1 * num2
            Case 3
                'lblMain.Text = 1 - 2
                num1 = num1 - num2
            Case 4
                'lblMain.Text = 1 + 2
                num1 = num1 + num2
            Case Else
                Debug.WriteLine("연산 선택 안됨")

        End Select

        lblMain.Text = num1

        curState = 0
        lblCurState.Text = curState.ToString()

    End Sub
    '클리어메서드
    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
        curSign = 0
        curState = 0
        num1 = 0
        num2 = 0
        isNum1 = False
        isNum2 = False
        lblMain.Text = Nothing
        lblSign.Text = Nothing

    End Sub
    '벡스페이스 메서드
    Private Sub btnBackSpace_Click(sender As Object, e As EventArgs) Handles btnBackSpace.Click
        If lblMain.Text.Length > 0 Then
            'Remove함수 첫번째 매개변수 : 삭제를 할 첫번째 위치(length는 시작이 0이다.)
            'Remove함수 두번째 매개변수 : 삭제를 할 텍스트 갯수
            lblMain.Text = lblMain.Text.Remove(lblMain.Text.Length - 1, 1)

        End If
    End Sub
End Class




Retrospection

  • 변수명 선언에서부터 if문, select case(switch문) 반환하는 형식의 메서드 등등 낮설다.

  • 항상 분할과 정복방법으로 생각하자

    • 계산기 : 계산하는 것이 목적
    • 어떻게 사용하나? --> 숫자 입력, 연산, 결과도출
    • 각가의 계산상태 구분 및 연산구분(+,-,*,/)을 구분해서 코드화시키자.


profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글