En 2008, Visual Basic, j'ai eu une exigence pour une boîte de message qui ne rester pour peu de temps et que le temps était à être variable. J'ai également eu le problème que lors de l'utilisation de l'écran étendu que le msgbox a montré sur l'écran étendu (qui était une forme différente) au lieu de sur l'écran d'ordinateur principal. Pour surmonter ces problèmes, j'ai créé une boîte de message personnalisée en utilisant un panneau sur le formulaire que j'avais sur l'écran principal.
Pour appeler le panneau de message DoMessage ("Le message", Secondes, Boutons pour afficher 1 = OK seulement 2 = Oui (ok) et Non, 3 = Oui, Non et Annuler Si les secondes sont 0 ou non spécifiées l'affichage du panneau est long (10000 secondes) Si les boutons à afficher ne sont pas spécifiés, ils sont réglés sur le bouton Ok. Si les secondes et les boutons sont spécifiés, si aucun bouton n'est cliqué, le panneau se cache juste après le délai d'attente.
les réponses sont 1 si Ok ou vous cliquez sur Oui, 2 si Non est cliqué, 3 si Annuler est cliqué il est mis en DoMsgResp si vous voyez ce qui est en elle pour gérer la réponse.
Créer le panneau de message lorsque ouvrant le formulaire en appelant MakeMsgPanel()
Dim MessagePanel As New Panel 'The panel
Dim MessageLabel As New Label 'The message
Dim MsgYes As New Button 'Yes or OK button
Dim MsgNo As New Button 'no button
Dim MsgCcl As New Button 'Cancel button
Dim Sleepsecs As Integer 'How long panel shows for
Dim DoMsgResp As Integer 'response 1, 2 or 3 depending which button clicked
Private Sub MakeMsgPanel()
Me.Controls.Add(MessagePanel)
Me.MessagePanel.Controls.Add(MessageLabel)
Me.MessagePanel.Controls.Add(MsgYes)
Me.MessagePanel.Controls.Add(MsgNo)
Me.MessagePanel.Controls.Add(MsgCcl)
MessagePanel.Location = New System.Drawing.Point(Me.Width/2 - 200, Me.Height/2 - 100)
MessagePanel.BackColor = Color.PaleGreen
MessageLabel.BackColor = Color.PeachPuff
MessagePanel.BorderStyle = BorderStyle.FixedSingle
MessageLabel.Font = New Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point)
MessageLabel.AutoSize = True
MessagePanel.AutoSize = True
MessagePanel.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowOnly
MessagePanel.Hide()
MsgYes.Location = New System.Drawing.Point(205, 5)
MsgNo.Location = New System.Drawing.Point(115, 5)
MsgCcl.Location = New System.Drawing.Point(25, 5)
MsgYes.Text = "Yes"
MsgNo.Text = "No"
MsgCcl.Text = "Cancel"
AddHandler MsgYes.Click, AddressOf MsgYes_Click
AddHandler MsgNo.Click, AddressOf MsgNo_Click
AddHandler MsgCcl.Click, AddressOf MsgCcl_Click
End Sub
Private Sub MsgYes_Click()
DoMsgResp = 1
Sleepsecs = 0
End Sub
Private Sub MsgNo_Click()
DoMsgResp = 2
Sleepsecs = 0
End Sub
Private Sub MsgCcl_Click()
DoMsgResp = 3
Sleepsecs = 0
End Sub
Private Sub DoMessage(ByVal Msg As String, Optional ByVal Secs As Integer = 0, _
Optional ByVal Btns As Integer = 0)
'Information messages that can be timed
Dim TheHeight As Integer
Dim TheWidth As Integer
Dim Labelx As Integer
Dim Labely As Integer
DoMsgResp = 0
MessageLabel.Text = Msg
If MessageLabel.Height < 90 Then
TheHeight = 100
Labely = (100 - MessageLabel.Height)/2
Else
TheHeight = MessageLabel.Height + 10
Labely = 5
End If
If MessageLabel.Width < 140 Then
TheWidth = 150
Labelx = (150 - MessageLabel.Width)/2
Else
TheWidth = MessageLabel.Width + 10
Labelx = 5
End If
MessagePanel.Size = New System.Drawing.Size(TheWidth, TheHeight)
MessageLabel.Location = New System.Drawing.Point(Labelx, Labely)
MessageLabel.Show()
MessagePanel.Show()
MessagePanel.BringToFront()
MsgYes.BringToFront()
MsgNo.BringToFront()
MsgCcl.BringToFront()
MessagePanel.Focus()
If Btns = 0 Or Btns > 3 Then Btns = 1 'Make ok button if none specified or number too high
If Btns = 1 Then
MsgYes.Text = "Ok"
MsgNo.Hide()
MsgCcl.Hide()
Else 'is 2 or 3
MsgYes.Text = "Yes"
MsgNo.Show()
If Btns = 2 Then MsgCcl.Hide() Else MsgCcl.Show()
End If
If Secs = 0 Then Secs = 10000 'make a long time
If Secs > 0 Then
Sleepsecs = Secs * 2
Do Until Sleepsecs < 1
Threading.Thread.Sleep(500)
Application.DoEvents()
Application.RaiseIdle(New System.EventArgs)
Sleepsecs = Sleepsecs - 1
Loop
End If
MessagePanel.Hide()
End Sub
Private Sub ButtonTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTest.Click
DoMessage("This is To see what happens with my message" & vbCrLf & _
"see if it works good", 0, 3)
If DoMsgResp = 1 Then
MsgBox("Ok was hit")
End If
If DoMsgResp = 2 Then
MsgBox("No was hit")
End If
If DoMsgResp = 3 Then
MsgBox("Cancel was hit")
End If
End Sub
Pour une personnalisation complète juste faire un formulaire, puis le rendre visible à chaque fois que vous souhaitez alerter l'utilisateur ... – Sam
MsgBox est la fonction Olden, MessageBox est une nouvelle avec plus d'options. Mais même MsgBox a un argument Title, difficile de ne pas le découvrir. Vous l'utilisez probablement de manière inappropriée si vous ressentez le besoin de le personnaliser.Son rapport dans le visage est assez grinçant à un utilisateur, utilisez-le seulement avec parcimonie et seulement pour les problèmes graves. Ou vous courez le risque que l'utilisateur rejette systématiquement la boîte sans la lire, manquant les plus importantes. Beaucoup de maux mineurs disponibles dans une bibliothèque de classe GUI. –
Si vous utilisez vb .net, utilisez MessageBox. Si cela n'a pas ce que vous voulez, faites votre propre formulaire. – dbasnett