2011-09-22 3 views
1

현재 활성화 된 양식을 기반으로 데이터베이스를 업데이트하고 싶습니다. 원래 GotFocus 이벤트를 사용하기로 결정했습니다. 그러나 양식에 컨트롤이있어서 작동하지 않는다는 것을 이해합니다. 그래서 나는 내가 활성화 된 이벤트를 사용한다고 생각했다. 이것은 작동하지만 여러 번 발사되는 것처럼 보입니다. 다음 코드에 넣어 :vb.net에서 여러 번 발동했습니다.

Private Sub frmNewTicket_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated 
    MsgBox("Form Activated") 
End Sub 

나는 양식을 선택하고 활성화하고 메시지 상자가 약 15 번 나타납니다.

왜 이렇게합니까? 어떻게해야합니까? 폼이 활성화 될 때만 코드를 한 번 실행하면됩니다.

참고 : 다른 응용 프로그램의 양식을 포함하여 사용자가 변경하는 양식이 여러 가지 있습니다.

+0

내가 파생 한 질문에서, 활성 양식에 대해 "무언가"를 한 번하고 싶습니까? 아마도 LOAD 또는 FORMCLOSING 이벤트가 당신이 찾고있는 것일 것입니다. 로드는 양식이 처음 표시되기 직전에 실행되며 아직 사용자가 볼 수는 없습니다. FormClosing은 사용자 (또는 코드)가 창을 닫을 것을 결정할 때 실행되며 여전히 볼 수 있습니다. – Martin

답변

3

메시지 상자에서 OK을 클릭 할 때마다 서식이 포커스를 다시 얻고 다시 활성화됩니다.

사람이 here을 올렸습니다 당신의 frmNewTicket_Activated 같은 정적 Boolean 값을 넣어 : 당신이 뭔가마다 양식이 활성화됩니다을하고자하는 것 같은

Static HasRan As Boolean=False 
If Not HasRan Then 
    HasRan=True 
    'put code here 
End If 
+0

안녕하세요. 회신 해 주셔서 감사합니다. 나는 이것을 시도했지만 이것은 아무런 효과가 없었다. 솔직히 말하면, 나는 그것이 왜 그렇게 될지 이해하지 못한다. 이벤트가 발생할 때마다 HasRan은 False로 설정되므로 코드를 자세히 테스트 할 때 false가됩니다. HasRan의 선언을 다른 곳으로 옮기면 한 번만 발사됩니다. 나는 그것이 어떻게 작동하는지 이해하지 못하기 때문에 그곳에서 뭔가를 놓치고있을 것입니다. 하지만 어쨌든 문제를 해결하는 데 도움이되었습니다. 나는 그것이 발사하고 있음을 테스트하기 위해 msgbox를 사용하고 있었다. 메시지 상자를 제거하고 원하는대로 작동하고 있습니다. 감사합니다. – Stephen

+0

@Stephen 정적 변수에 이와 같은 초기 값을 지정하면 매번 '_Activated' 메서드가 처음 실행될 때만 할당됩니다. 당신이 원하는대로 일하게되어 기쁩니다. 양식이 활성화 된 후에 어떤 일이 일어나는지에 따라이 방식으로 작동 시키려면 약간의 조정이 필요할 수 있습니다. – jonsca

+0

@AndreSilva 머리를 주셔서 감사합니다! – jonsca

1

그것은 소리. FormActivated 이벤트는 Form에서 포커스를 가져 오지 않으면 포커스가 다시 가져올 때 다른 Activation 이벤트를 트리거하는 한 정상적으로 작동합니다. Beep 또는 양식의 색상 변경과 같은 MessageBox 이외의 다른 것을 사용해보십시오