⦁ 간단한 출력문
⦁ 계산기
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
'일단 계산하는 숫자는 1과 2로 고정(임시로)
'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
변수명 선언에서부터 if문, select case(switch문) 반환하는 형식의 메서드 등등 낮설다.
항상 분할과 정복방법으로 생각하자