.net MenuStrip可以';不要把注意力集中在负载上

.net MenuStrip可以';不要把注意力集中在负载上,.net,vb.net,.net,Vb.net,我希望尽可能准确地说,我有一个主窗体,我们将它称为“Form1”。在Form1中,用户有可能通过菜单条启动另一个窗体,我们将它称为“Form2”。在Form2中,我有另一个menustrip和datagridview 我的问题是,当用户启动Form2时,在菜单条被“激活”之前,我必须用左键单击2次,我的意思是 form2负载 我点击菜单条:“菜单” 什么也没发生 当菜单条向下滚动时,我再次单击 这真的很可怕,我无法修复,因为我不知道是什么原因造成的 如果你们有任何解决方案或需要更多信息,请告

我希望尽可能准确地说,我有一个主窗体,我们将它称为“Form1”。在Form1中,用户有可能通过菜单条启动另一个窗体,我们将它称为“Form2”。在Form2中,我有另一个menustrip和datagridview

我的问题是,当用户启动Form2时,在菜单条被“激活”之前,我必须用左键单击2次,我的意思是

  • form2负载
  • 我点击菜单条:“菜单”
  • 什么也没发生
  • 当菜单条向下滚动时,我再次单击
这真的很可怕,我无法修复,因为我不知道是什么原因造成的

如果你们有任何解决方案或需要更多信息,请告诉我

这是名为Ajout.vb的表单2

Imports System.Data.OleDb
Imports System.Globalization

Public Class Ajout
    Private dSet As DataSet
    Private dAdapter As New OleDbDataAdapter
    Private bJustEdit As Boolean = False

    Sub New(ByRef dSet As DataSet, ByRef dAdapter As OleDbDataAdapter)
        InitializeComponent()
        Me.dSet = dSet
        Me.dAdapter = dAdapter
    End Sub

    Private Sub Ajout_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With DataGridView1
            .DataSource = dSet
            .DataMember = "Articles_table"
            .Columns("Prix").DefaultCellStyle.Format = "C2"
            Console.WriteLine(.Columns("Prix").ValueType)
            For Each clm As DataGridViewColumn In .Columns
                clm.SortMode = DataGridViewColumnSortMode.NotSortable
            Next
        End With
    End Sub

    Private Sub DataGridView1_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
        'Quelle est l'erreur
        If (TypeOf (e.Exception) Is ConstraintException) Then
            'Envoie une message box pour informer l'utilisateur avec une possibiliter
            If (drMessageBoxFuntion(0) = Windows.Forms.DialogResult.Yes) Then
                'Possibiliter choisi on regarde si le sender est bien de datagridview pour eviter un erreur de cast
                If (TypeOf sender Is DataGridView) Then
                    'Nouvelle variable car sa devien inlisible avec beaucoup de cast
                    Dim dgvLocal As DataGridView = CType(sender, DataGridView)
                    Dim sNameValue As String = dgvLocal.Rows(e.RowIndex).Cells("Nom").Value.ToString
                    Dim dgvOriginalCells As DataGridViewCellCollection = dgvLocal.Rows(dgvFindRowsBy_Name(sNameValue).Index).Cells
                    Dim dgvErrorCells As DataGridViewCellCollection = dgvLocal.Rows(e.RowIndex).Cells

                    'Regarde si le prix est pareille si faux propose a l'utilisateur d'updater le prix avec le nouveau
                    'ou de simplement ajouter la quantite
                    If (Not Equals(dgvOriginalCells("Prix").Value.ToString, dgvErrorCells("Prix").Value.ToString)) Then
                        'Prix different propose de mettre a jour
                        If (drMessageBoxFuntion(1) = Windows.Forms.DialogResult.Yes) Then
                            dgvOriginalCells("Prix").Value = dErrorRow()
                            dgvOriginalCells("Quantité").Value += dgvErrorCells("Quantité").Value
                        Else
                            dgvOriginalCells("Quantité").Value += dgvErrorCells("Quantité").Value
                        End If
                    Else
                        dgvOriginalCells("Quantité").Value += dgvErrorCells("Quantité").Value
                    End If
                    'Sender inconnu 
                Else
                    MsgBox("Une erreur inconnu est survenu, aucune operation n'a été effectué, vous n'avez qu'à recommencer")
                End If
            End If

            'Si lettre entré, msg pour informer le reste est gerer par le dataset qui n'accepte que
            'les chiffre, car defini dans la database
        ElseIf (TypeOf (e.Exception) Is FormatException) Then
            MsgBox("Vous ne pouvez pas entrer de lettre dans la collone de prix ou de quantité")
        End If
    End Sub


    'Fonction contenant plusieur message box
    Private Function drMessageBoxFuntion(ByVal index As Integer) As DialogResult
        If (index = 0) Then
            Dim drAction As DialogResult = MessageBox.Show("Vous ne pouvez pas ajouter deux fois le même nom," & _
                                               " voulez vous ajouter la quantité du nouvelle arti" & _
                                               "cle a celui deja présent ?", _
                                               "Erreur, article double.", _
                                               MessageBoxButtons.YesNo, _
                                               MessageBoxIcon.Question)
            Return drAction
        ElseIf (index = 1) Then
            Dim drAction As DialogResult = MessageBox.Show("Le prix de vos deux article, de même genre, diffère." & _
                                                           "Voulez-vous mettre a jour le prix à jour (oui), ou " & _
                                                           "simplement ajouter la quantité a l'item déjà présent (no" & _
                                                           "n).", "Erreur, prix different", _
                                                            MessageBoxButtons.YesNo, _
                                                            MessageBoxIcon.Question)
            Return drAction
        End If
        Return Nothing
    End Function

    'Retourne une datagridviewROW et non l'index car permet d'avoir l'objet
    'et donc de prendre la methode index ou autre methode si le besoin est
    Private Function dgvFindRowsBy_Name(ByVal oNameValue As Object) As DataGridViewRow
        For Each row As DataGridViewRow In DataGridView1.Rows
            If row.Cells.Item("Nom").Value = oNameValue Then
                Return row
            End If
        Next
        Return Nothing
    End Function

    'Message pre programmer dans une array permettant l'affichage de message avec une input
    Private Function dErrorRow() As Single
        Dim dNewValue As Object = InputBox("Nouveau prix, entrez uniquement un nombre s'il vous plait.")

        Do Until IsNumeric(dNewValue)
            dNewValue = InputBox("Nouveau prix, entrez uniquement un nombre s'il vous plait.")
        Loop

        Return CType(dNewValue, Single)
    End Function

    Private Sub DataGridView1_RowValidating(sender As Object, e As DataGridViewCellCancelEventArgs) Handles DataGridView1.RowValidating
        If (TypeOf sender Is DataGridView) Then
            Dim dgvRow As DataGridViewRow = CType(sender, DataGridView).Rows(e.RowIndex)
            If (Not ((IsDBNull(dgvRow.Cells("Nom").Value) Or IsDBNull(dgvRow.Cells("Prix").Value) Or IsDBNull(dgvRow.Cells("Quantité").Value)) = (IsDBNull(dgvRow.Cells("Nom").Value) And IsDBNull(dgvRow.Cells("Prix").Value) And IsDBNull(dgvRow.Cells("Quantité").Value)))) Then
                MsgBox("Veuillez remplir toute les cases.")
                e.Cancel = True
            End If
        End If
    End Sub

    Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
        If (TypeOf sender Is DataGridView) Then
            Dim dgvRow As DataGridViewRow = CType(sender, DataGridView).Rows(e.RowIndex)

            If (Not dgvRow.IsNewRow) Then
                If (e.ColumnIndex = 1) Then
                    Dim dTemp As Single

                    If (Not Single.TryParse(e.FormattedValue.ToString, NumberStyles.Currency, CultureInfo.CurrentCulture, dTemp) OrElse dTemp < 0) Then
                        MsgBox("La valeur ne doit pas être négative ni être une lettre. Ne laisser pas la case vide non plus.")
                        e.Cancel = True
                    End If
                ElseIf (e.ColumnIndex = 2) Then
                    Dim iTemp As Integer

                    If (Not Integer.TryParse(e.FormattedValue.ToString, NumberStyles.Currency, CultureInfo.CurrentCulture, iTemp) OrElse iTemp < 0) Then
                        MsgBox("La valeur ne doit pas être négative ni être une lettre. Ne laisser pas la case vide non plus.")
                        e.Cancel = True
                    End If
                End If
            End If
            dgvRow.Selected = False
        End If
    End Sub

    Private Sub EnregistrerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EnregistrerToolStripMenuItem.Click
        If dSet.HasChanges Then
            Try
                Using con = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = Mokmeuh.accdb")
                    con.Open()
                    Dim cmb As New OleDbCommandBuilder(dAdapter)
                    dAdapter.Update(dSet.Tables("Articles_Table"))
                End Using
            Catch ex As Exception

            End Try
        End If
    End Sub

    Private Sub AnnulerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AnnulerToolStripMenuItem.Click
        dSet.RejectChanges()
        DataGridView1.Refresh()
    End Sub
End Class
导入System.Data.OleDb
进口系统.全球化
公共类Ajout
专用数据集作为数据集
专用数据适配器作为新的OleDbDataAdapter
私有bJustEdit为布尔值=False
Sub-New(ByRef数据集作为数据集,ByRef数据适配器作为OleDbDataAdapter)
初始化组件()
Me.dSet=dSet
Me.dAdapter=dAdapter
端接头
私有子Ajout_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
使用DataGridView1
.DataSource=dSet
.DataMember=“文章表”
.Columns(“Prix”).DefaultCellStyle.Format=“C2”
Console.WriteLine(.Columns(“Prix”).ValueType)
对于每个clm作为.Columns中的DataGridViewColumn
clm.SortMode=DataGridViewColumnSortMode.NotSortable
下一个
以
端接头
私有子DataGridView1_DataError(ByVal发送方作为对象,ByVal e作为DataGridViewDataErrorEventArgs)处理DataGridView1.DataError
“这是我的错。”
如果(TypeOf(e.Exception)是ConstraintException),那么
“可能的情况下,向告密者发送消息”
如果(drMessageBoxFunction(0)=Windows.Forms.DialogResult.Yes),则
“可能的选择是发送人在数据网格视图中输入错误的数据
如果(发送方类型为DataGridView),则
“Nouvelle variable car sa devien inlisible avec beaucoup de cast
Dim dgvLocal As DataGridView=CType(发送方,DataGridView)
Dim sNameValue As String=dgvLocal.Rows(e.ROWDINDEX).Cells(“Nom”).Value.ToString
将dgvOriginalCells作为DataGridViewCellCollection=dgvLocal.Rows(dgvFindRowsBy_Name(sNameValue.Index).Cells进行调整
将dgvErrorCells作为DataGridViewCellCollection=dgvLocal.Rows(e.RowIndex.Cells)进行调整
“Regarde si le prix est pareille si faux提出了一个新prix avec le nouveau的“利用率”更新程序
“你可以简单地说一句话
如果(不等于(dgvOriginalCells(“Prix”).Value.ToString,dgvErrorCells(“Prix”).Value.ToString)),则
“一个月一个月的大奖赛
如果(drMessageBoxFunction(1)=Windows.Forms.DialogResult.Yes),则
dgvOriginalCells(“Prix”).Value=dErrorRow()
dgvOriginalCells(“Quantité”).Value+=dgvErrorCells(“Quantité”).Value
其他的
dgvOriginalCells(“Quantité”).Value+=dgvErrorCells(“Quantité”).Value
如果结束
其他的
dgvOriginalCells(“Quantité”).Value+=dgvErrorCells(“Quantité”).Value
如果结束
”她说
其他的
MsgBox(“您在任何情况下都会犯错,您的行动不会有任何效果,请重新开始”)
如果结束
如果结束
Si-LeTele Enter,MSG倾诉者LeSee Eth.Geer-Par LE数据集Queq阙
“les chiffre,汽车定义数据库
ElseIf(TypeOf(e.Exception)是FormatException)则
MsgBox(“您是否可以在数量和价格上进行交易”)
如果结束
端接头
'功能上下文plusieur消息框
私有函数drMessageBoxFunction(ByVal索引为整数)作为DialogResult
如果(索引=0),则
Dim drAction As DialogResult=MessageBox.Show(“你的名字是什么?”_
“新艺术的数量是多少?”_
“是否发送了一封电子邮件?”_
“呃,第二条。”_
MessageBoxButtons.YesNo_
MessageBoxIcon.问题)
回流阻力
ElseIf(索引=1)然后
Dim drAction As DialogResult=MessageBox.Show(“两人一组的文章,不同类型的作品。”&_
“你能在一个星期的一个星期(oui),ou”和_
“发送项目数量的简化(否)&”_
“n.”,“错误,大奖赛不同”_
MessageBoxButtons.YesNo_
MessageBoxIcon.问题)
回流阻力
如果结束
一无所获
端函数
“Retourne une datagridviewROW和non l”索引车,用于存储目标
我们的方法指数和方法是一样的
作为DataGridViewRow的专用函数dgvFindRowsBy_Name(ByVal oNameValue作为对象)
对于DataGridView1.Rows中作为DataGridViewRow的每一行
If row.Cel
Private Sub MenuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MenuToolStripMenuItem.Click
    If (TypeOf sender Is ToolStripMenuItem) Then
        CType(sender, ToolStripMenuItem).ShowDropDown()
    End If
End Sub
Public Class MyMenuStrip
    Inherits MenuStrip

    Protected Overrides Sub WndProc(ByRef m As Message)
        '' Set focus on WM_MOUSEACTIVATE message
        If m.Msg = &H21 AndAlso Me.CanFocus AndAlso Not Me.Focused Then
            Me.Focus()
        End If
        MyBase.WndProc(m)
    End Sub

End Class