기본 제공 .NET 2.0 탭 컨트롤의 단일 인스턴스가있는 모달 폼이 있습니다. 탭 컨트롤에는 여러 페이지가 있으며 그 중 하나에는 사용자가 처음으로 활성화 할 때까지 채워지지 않은 콤보 상자가 있습니다. 이런 일이 발생하면 DropDown 이벤트를 처리하고 몇 초가 걸리는 프로세스를 실행 한 다음 해당 프로세스에서 반환 한 항목을 콤보 상자에 추가합니다.탭 컨트롤에서 콤보 상자 드롭 다운이 예기치 않게 닫힙니다.
콤보 상자의 목록 부분이 드롭 된 직후를 제외하고는 다른 일부 컨트롤이 포커스를 얻은 것처럼 즉시 닫힙니다. 폼에 탭 컨트롤이 있고 콤보 상자의 항목을 검색하는 프로세스가 4 초 이상 걸립니다. 콤보 상자만으로 완전히 빈 폼을 만들면이 동작이 나타나지 않습니다.
말할 필요도없이, 이것은 신념을 뛰어 넘는 이상한 일입니다. 탭 컨트롤이 현재 포커스가있는 컨트롤을 방해하는 이유는 무엇입니까?
편집 :
다음은 주어진 콤보 상자의 이벤트 처리기 코드입니다. 기본적으로 네트워크에서 SQL 서버 목록을 작성하고 있습니다. 몇 초가 걸리면 GetDataSources가 호출됩니다.
Private Sub cmbServer_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbServer.DropDown
Dim oTable As DataTable
Dim lstServers As List(Of String)
Dim lstAliases As List(Of String)
Try
If cmbServer.Items.Count = 0 Then
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
oTable = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources
lstServers = New List(Of String)
For Each oRow As DataRow In oTable.Rows
If oRow("InstanceName").ToString = "" Then
lstServers.Add(oRow("ServerName").ToString)
Else
lstServers.Add(oRow("ServerName").ToString & "\" & oRow("InstanceName").ToString)
End If
Next oRow
'Retrieve any server aliases on the client and add them to the server list
lstAliases = GetSQLServerAliases()
If lstAliases IsNot Nothing Then
For Each sAlias As String In lstAliases
lstServers.Add(sAlias)
Next sAlias
End If
lstServers.Sort()
For Each sServer As String In lstServers
cmbServer.Items.Add(sServer)
Next sServer
End If
Catch ex As Exception
ErrHandler("frmRefreshDB", "cmbServer_DropDown", ex.Source, ex.Message, ex.InnerException)
Finally
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
If oTable IsNot Nothing Then
oTable.Dispose()
End If
End Try
End Sub
탭 컨트롤은 포커스 문제 및 하위 컨트롤과 관련된 다른 문제를 일으키는 것으로 유명합니다. 나는이 특별한 이슈를 본적이 없지만 그것을 복제하려고 노력할 것이다. –
나는 행동을 재현 할 수는 없지만 (특별한 상황이 필요한 것처럼 당신의 설명에서 나는 소리를 낸다.) 호기심에서 벗어난다. DropDown 이벤트 처리기 (및 해당 처리기를 실행하는 동안 콤보 상자에 액세스하는 다른 코드)의 코드를 우리와 공유 할 수 있습니까? –
ComboBox의 LostFocus 이벤트에 중단 점을 넣고 호출을 시작한 StackTrace를 검사 할 수 있습니다. 이것은 좀 더 통찰력을 제공 할 수 있습니다. –