티스토리 뷰

 

[ 이슈 ]

ComboBox1의 1, 2, 3을 선택 후 실행시 아무 문제없이 DB에 반영이 잘 되는데, "메세지4 및 메세지4"를 선택하여 실행시 "" 문자열에서 'integer' 형식으로 변환할 수 없습니다. 라는 오류가 발생한다. 

ComboBox1.Items.Add("메세지1" & Space(100) & "1")
ComboBox1.Items.Add("메세지2" & Space(100) & "2")
ComboBox1.Items.Add("메세지3" & Space(100) & "3")
ComboBox1.Items.Add("메세지4 및 메세지4" & Space(100) & "4")
ComboBox1.SelectedIndex = 0
'내용 보안을 위해 비슷한 환경으로 변경하였습니다.

 

 

 

[ 해결 ]

오류를 보자마자 아차 싶었는데 이유는 바로 공백 때문에 나는 것이라고 생각이 들었다.

공백을 고쳐주려면 ComboBox1의 값을 이용하는 코드를 고쳐줘야 한다. 

 

 

 

아래는 수정하기 전의 쿼리이다. 

Dim selectedNumber As Integer
If ComboBox1.Text.ToString IsNot Nothing Then
    selectedNumber = CInt(ComboBox1.Text.ToString().Split(" "c)(100))
Else
    ' 선택된 값이 없을 경우 예외 처리 수행(기본값을 할당하거나 오류 메시지를 표시)
    selectedNumber = 0
    MessageBox.Show("값을 선택해주세요.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Return
End If

 

 

아래는 수정한 후의 쿼리이다. 

수정된 쿼리로 실행하니 ComboBox에서 문제가 되었던 항목을 선택해서 실행해도 오류 없이 등록이 된다.

Dim selectedNumber As Integer
Dim parts() As String = ComboBox1.Text.ToString().Split(" "c) '콤보박스의 텍스트를 공백으로 분리하여 문자열 배열로 저장 (4번째 컬럼 때문 존재)
If parts.Length > 1 Then
    selectedNumber = CInt(parts(parts.Length - 1)) '문자열 배열의 마지막 요소를 정수로 변환하여 selectedNumber 변수에 저장
End If

 

 

이 경우에는 ComboBox에서 선택을 하지 않은 경우가 없이 첫번째가 임의로 선택되게끔 코드를 작성해서 위의 쿼리처럼 해결할 수 있었다. 그런데 편의에 따라 선택하지 않는 ComboBox가 주어질 경우에는 이렇게 작성하면 선택했을 때와 선택하지 않았을 경우를 두가지로 나누어 선택할 수 있게 된다.

 

 

Dim selectedNumber As Integer
If ComboBox1.Text <> "" Then ' ComboBox1이 비어있지 않으면 다음을 실행함
    Dim parts() As String = ComboBox1.Text.ToString().Split(" "c)
    If parts.Length > 1 Then
        selectedNumber = CInt(parts(parts.Length - 1))
    Else
        ' 선택된 값이 없을 경우 예외 처리 수행(기본값을 할당하거나 오류 메시지를 표시)
        selectedNumber = 0
        MessageBox.Show("값을 선택해주세요.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Return
    End If
Else
    ' 선택된 값이 없을 경우 예외 처리 수행(기본값을 할당하거나 오류 메시지를 표시)
    selectedNumber = 0
    MessageBox.Show("값을 선택해주세요.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Return
End If

 

 

위 예시처럼 선택된 항목이 없을 때 메시지를 표시하고 선택이 필요하다는 것을 알려주는 것도 사용자 경험을 향상시키는 좋은 접근 방법인 것 같다. 

 

 

 

[ 정리 ]

Dim selectedNumber As Integer
Dim parts() As String = ComboBox1.Text.ToString().Split(" "c)
If parts.Length > 1 Then
    selectedNumber = CInt(parts(parts.Length - 1))
End If

 

 

ComboBox1에 항목들을 추가한 후 ComboBox1.SelectedIndex = 0을 통해 항상 첫 번째 항목이 선택되도록 설정했다. (ComboBox1이 항상 비어있지 않으며, 항상 하나 이상의 항목을 가지고 있다.)

따라서 "If parts.Length > 1 Then" 문을 사용하여 문자열 배열 parts에 항상 최소한 두 개 이상의 요소가 있다는 것을 확인한 다음에 "selectedNumber = CInt(parts(parts.Length - 1))" 문을 실행하는 것으로 충분하다.

그러므로 else 블록을 사용하지 않고도 동일한 결과를 얻을 수 있다.

이렇게 코드를 작성하면 선택된 항목이 없을 때 메시지를 표시하지 않고, selectedNumber 변수가 0으로 초기화되며, 다른 항목들에 대해 원하는 동작을 수행할 수 있게 된다.

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함