2013-05-20 3 views
-1

Microsoft Visual Basic 2010에서 폼에는 AcceptButton이라는 속성이 있습니다. 이것은 디자이너의 폼의 ok 버튼이나 코드 (예 : Me.AcceptButton = Me.OKbutton)로 설정할 수 있습니다.코드에서 accept 단추를 비활성화하는 방법

Me.AcceptButton = Null, 참고과 같은 코드로이 속성을 해제하는 방법을 알고 싶습니다. 디자이너에서이 속성은 (none)으로 설정할 수 있습니다.

내가 이것을 달성하는 방법을 알고 싶은 이유는 다음과 같습니다. 사용자가 데이터를 입력하는 텍스트 상자가 있습니다. 입력을 누르면 오류 검사가 수행됩니다. 이것은 내가 데 문제가 AcceptButton 속성을 사용하는 경우이 코드로 인해 리턴 키의 이중 사용, 실행되지 않는다는 것입니다

Private Sub textbox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textbox1.KeyDown 
    If e.KeyCode = Keys.Return Then 

다음 코드를 사용합니다. 따라서 코드를 사용하여 AcceptButton 속성을 일시적으로 사용 중지 한 다음 다시 사용하도록 설정하고 싶습니다.

AcceptButton을 설정하지 않으면이 코드가 실행됩니다.

+0

왜 처음부터 사용하도록 설정해야합니까? – neelsg

+1

VB.Net 질문에 VB6 태그를 사용하는 이유는 무엇입니까? – Bob77

+0

왜 처음부터 활성화해야합니까? 사용자가 입력 버튼을 눌러이 설정 대화 상자의 값을 승인하고 싶습니다. 그러나 everythig가 설정되기 전에이 대화 상자의 ok 및 accept 버튼이 비활성화됩니다. 즉, Enter 키를 수락 버튼으로 사용할 수 없습니다. 이 경우 사용자가 텍스트 상자에 Enter 키를 누를 수 있도록 Enter 키를 사용하고 올바른 항목 인 경우 확인 및 승인 단추를 사용할 수 있도록합니다. – josh

답변

0

이 아닌으로 설정된 AcceptButton() 속성을 그대로 둡니다. 그런 다음에서 KeyDown() 핸들러에 입력하면 키를 누른 후 모든 테스트를 통과한다 :

OKbutton.PerformClick() 
+0

그 문제는 텍스트 상자의 처리기 인 keyDown 이벤트에서 OKbutton.PreformClick 만 수행한다는 것입니다. 입력란에 입력하지 않으면 입력 키를 눌러 양식의 변경 사항을 수락합니다. – josh

+0

포커스를받을 수있는 폼에 다른 것이 있습니까? –

+0

예 몇 가지가 있습니다.다른 텍스트 상자, NumericalUpDown, 2 개의 라디오 버튼 및 일반 버튼 (ok, cancle 및 accept 버튼이 아님)이 있습니다. 그러나 Me.AcceptButton = Nothing을 사용하여 accept 버튼을 일시적으로 사용 불가능으로 설정 한 다음 Me.AcceptButton = Me.OKbutton으로 검사를 수행 한 후 다시 활성화하여이 문제를 해결했습니다. – josh

2

AcceptButton 속성과 수리를하지 마십시오, 그것은 사용자에게 중요한 피드백을 제공합니다. 실제 문제를 해결하려면 TextBox의 AcceptsReturn 속성을 True로 설정하십시오.

+0

텍스트 상자의 AcceptsReturn 속성이 이미 true로 설정되었습니다. – josh

1

여전히 Me.AcceptButton = 아무것도

+0

고마워요. 제가 찾던 바로 그 것입니다. – josh

0

또 다른 방법은 비활성화 당신의 버튼과 당신의 조건이 충족 될 경우 만 다시 활성화로 버튼의 사용을 허용하지 않도록합니다. 그런 다음 TextBox 핸들러에 Enter를 트랩하지 않아도됩니다. 다음은 간단한 예입니다.

Public Class Form1 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Me.AcceptButton = Me.OKbutton 
     Me.OKbutton.Enabled = False 
    End Sub 

    Private Sub TextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles TextBox1.TextChanged 
     ValidateEntries() 
    End Sub 

    Private Sub ValidateEntries() 
     ' ... put your logic in here to determine if all the fields in the form are in a valid state ... 
     ' set the Enabled state of OKbutton accordingly: 

     Dim valid As Boolean = True ' assume valid until proven otherwise 

     ' Made up validation code: 
     Dim value As Integer 
     If Integer.TryParse(TextBox1.Text, value) Then 
      If value < 60 Then 
       valid = False 
      End If 
     Else 
      valid = False 
     End If 

     Me.OKbutton.Enabled = valid 
    End Sub 

    Private Sub OKbutton_Click(sender As Object, e As System.EventArgs) Handles OKbutton.Click 
     MessageBox.Show("OK") 
    End Sub 

End Class 
관련 문제