Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在代码中禁用accept按钮_Vb.net_Visual Studio 2010_Windows Forms Designer - Fatal编程技术网

Vb.net 如何在代码中禁用accept按钮

Vb.net 如何在代码中禁用accept按钮,vb.net,visual-studio-2010,windows-forms-designer,Vb.net,Visual Studio 2010,Windows Forms Designer,在Microsoft Visual Basic 2010中,表单具有名为AcceptButton的属性。这可以在设计器中设置为表单的ok按钮,也可以通过代码设置,如Me.AcceptButton=Me.OKbutton 我想知道如何在代码中禁用此属性,例如Me.AcceptButton=Null,注意这不起作用。在设计器中,此属性可以保留为(无) 我想知道如何做到这一点的原因如下。我有一个用户输入数据的文本框;当他们按enter键时,错误检查完成。这将使用以下代码 Private Sub

在Microsoft Visual Basic 2010中,表单具有名为AcceptButton的属性。这可以在设计器中设置为表单的ok按钮,也可以通过代码设置,如
Me.AcceptButton=Me.OKbutton

我想知道如何在代码中禁用此属性,例如
Me.AcceptButton=Null
注意这不起作用。在设计器中,此属性可以保留为(无)

我想知道如何做到这一点的原因如下。我有一个用户输入数据的文本框;当他们按enter键时,错误检查完成。这将使用以下代码

    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属性,然后使用代码重新启用它

如果我没有设置AcceptButton,此代码将运行。

保留AcceptButton()属性未设置。然后,在KeyDown()处理程序中,如果按enter键并且所有内容都通过了测试:

OKbutton.PerformClick()

不要修改AcceptButton属性,它会向用户提供重要的反馈。修复real问题,将文本框的“AcceptsReturn”属性设置为True。

如果仍要禁用accept按钮,请使用as Me.AcceptButton=Nothing

另一种方法是禁用按钮,然后仅在满足条件时重新启用它。这样,就不必在文本框处理程序中设置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
公共类表单1
私有子表单1_Load(发送方作为System.Object,e作为System.EventArgs)处理MyBase.Load
Me.AcceptButton=Me.OKbutton
Me.OKbutton.Enabled=False
端接头
私有子TextBox1_TextChanged(发送者作为对象,e作为System.EventArgs)处理TextBox1.TextChanged
ValidateEntries()
端接头
私有子系统()的
' ... 将逻辑放在这里,以确定表单中的所有字段是否处于有效状态。。。
'相应地设置OK按钮的启用状态:
Dim valid As Boolean=True“假设有效,除非另有证明
'组合验证代码:
将值设置为整数
如果是Integer.TryParse(TextBox1.Text,value),则
如果值<60,则
有效=错误
如果结束
其他的
有效=错误
如果结束
Me.OKbutton.Enabled=有效
端接头
Private Sub OKbutton\u Click(发送者作为对象,e作为System.EventArgs)处理OKbutton。单击
MessageBox.Show(“确定”)
端接头
末级

为什么首先需要启用它?为什么要将VB.Net问题标记为VB6?为什么首先需要启用它?我想使用“接受”按钮让用户按enter键并接受此设置对话框中的值。但是,在设置everythig之前,此对话框的ok和accept按钮被禁用,这意味着enter键不能用作accept按钮。在这种情况下,我希望使用enter键允许用户在文本框中按enter键,如果输入有效,则启用ok和accept按钮。如果输入无效,则禁用ok和accept按钮,因此,我想再次使用enter键接受文本框中的更改。为什么要将VB.Net问题标记为VB6?很抱歉,标记错误,现在已更改。textbox的AcceptsReturn属性已设置为true。问题是它将仅在keyDown事件中执行OKbutton.PreformClick,这是textbox的处理程序。如果从未输入文本框,我希望enter键接受对表单的更改。表单上还有其他可以接收焦点的内容吗?是的,有一些内容。还有另一个文本框,一个数字下拉按钮,两个单选按钮和一个普通按钮(不是ok、Cancel和accept按钮)。但是我现在已经解决了这个问题,通过使用Me.AcceptButton=Nothing临时禁用accept按钮,然后在使用Me.AcceptButton=Me.OKbutton执行检查后重新启用它。