【问题标题】:My message box show at the same time as main form load visual basic?我的消息框在主窗体加载 Visual Basic 的同时显示?
【发布时间】:2018-01-19 08:49:08
【问题描述】:

我有这样的编码:

Private Sub txtNip_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNip.KeyPress
    If Not (Asc(e.KeyChar) >= Asc("0") And Asc(e.KeyChar) <= Asc("9") Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13) Then
        e.KeyChar = Chr(0)
        MessageBox.Show("Silahkan Masukan Data NIP Dengan Angka...!!")
    ElseIf Asc(e.KeyChar) = 13 Then
    End If
End Sub

Private Sub txtNip_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNip.Enter
    cp.P_NIP = Me.txtNip.Text
    If cp.KeypressID() = True Then
        Me.txtNip.Enabled = False
        Me.Fill_Data()
    Else
        MessageBox.Show("Data Tidak Ditemukan, Nomor Induk Pegawai Yang Anda Masukan Salah..!!")
        Me.Bersih()
    End If
End Sub

和这样的课程:

 Public Function KeypressID() As Boolean
        Dim cnn As New SqlConnection(StrConn)
        Dim cmmd As New SqlCommand
        Dim dreader As SqlDataReader
        Dim SQL As String
    SQL = "SP_SELECT_PEGAWAI"

    cnn.Open()
    cmmd = New SqlCommand(SQL, cnn)
    cmmd.CommandType = CommandType.StoredProcedure
    cmmd.Parameters.Clear()
    cmmd.CommandText = SQL
    cmmd.Parameters.Add(New SqlParameter("@P1", NIP))
    dreader = cmmd.ExecuteReader

    If dreader.Read = True Then
        Dim ImgByte() As Byte = dreader("Foto")
        Dim ImgStr As New System.IO.MemoryStream(ImgByte)
        Me.Foto = Image.FromStream(ImgStr)
        Me.Nama = dreader("Nama")
        Me.Jabatan = dreader("Jabatan")
        Me.Daerah = dreader("Daerah")
        Me.Tsk = dreader("Tsk_Jab")
        Me.PktPns = dreader("Pnk_Pns")
        Me.GolPns = dreader("Gol_Pns")
        Me.TmtPns = dreader("Tmt_Pns")
        Me.Pensiun = dreader("Pensiun")
        Return True
    Else
        Me.Foto = Nothing
        Me.Nama = ""
        Me.Jabatan = ""
        Me.Daerah = ""
        Me.Tsk = Date.Now
        Me.PktPns = ""
        Me.GolPns = ""
        Me.TmtPns = Date.Now
        Me.Pensiun = Date.Now
        Return False
    End If
    cnn.Close()
End Function

我的问题是,我的表单与消息框“data tidak ditemukan..”同时加载。当在数据库中未找到 txtnip 时,我希望该消息框消失,并且当消息框单击表单中的按钮确定时,将通过调用方法 bersih() 自行清理。怎么弄好?

【问题讨论】:

  • If dreader.Read = True => 我觉得应该是If dreader.HasRows = True,那么你可以使用While dreader.Read() ... End While来迭代阅读器并返回True。出现问题是因为KeypressID方法返回false,表示dreader.ReadFalse值。
  • 不工作的哲也先生...
  • @TetsuyaYamamoto 如果 OP 只期待一条记录,那么 If dreader.Read Then 就可以了。您也不需要 HasRows 来执行 While-Loop。如果没有任何记录,则将跳过循环。
  • txtNIP 是第一个关注表单的控件吗?这将触发 Enter 事件。如果您不希望这样,则将第一个焦点控件设置为其他内容,或删除 Enter 处理程序并将其添加到表单的 Shown 事件中,这样它就不会过早触发。不清楚你的 NIP 值是从哪里来的。
  • 是的,我把注意力集中在 txtnip 上。你能解释更多吗? larstech?

标签: sql sql-server vb.net class


【解决方案1】:
Private Sub txtNip_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNip.KeyPress
    If Not (Asc(e.KeyChar) >= Asc("0") And Asc(e.KeyChar) <= Asc("9") Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13) Then
        e.KeyChar = Chr(0)
        MessageBox.Show("Silahkan Masukan Data NIP Dengan Angka...!!")
    ElseIf Asc(e.KeyChar) = 13 Then
    End If

    cp.P_NIP = Me.txtNip.Text
    If Me.txtNip.TextLength = 18 And cp.KeypressID() = True Then
        Me.Fill_Data()
        Me.btnAdd.Focus()
    ElseIf Me.txtNip.TextLength = 18 And cp.KeypressID() = False Then
        MessageBox.Show("Silahkan Masukan Data...!!")
        Me.Bersih()
    End If
End Sub

谢谢 Larchtech 先生...

【讨论】:

  • 使用“AndAlso”而不是“And”,因为您只想在有 18 个字符时评估 KeypressID。
猜你喜欢
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
相关资源
最近更新 更多