0

Visual Basic でMsgBoxコントロールをカスタマイズする方法はありますか?

ユーザーに警告するためによく使用します。ただし、画面にポップアップすることはありません。下部のタスク バーに沿って表示されるだけです。また、常に「App_data_xxx」のような見出しがあります。これを何らかの方法で改善できますか?

私の検索ではあまり役に立ちません。

例えば:

' Queries user number and password against the database and returns user
Dim matchingusers = From u In db.Users
                    Where username = u.Email And password = u.Password
                    Select u

' Checks if a valid user was returned
If matchingusers.Count = 0 Then
    MsgBox("Invalid user entered, try again")
Else
    SelectedDeveloper = 0
    ' Set the logged in user for use in the project
    GlobalVariables.LoggedInUser = matchingusers.First
4

3 に答える 3

3

MessageBox関数とその多くの変数を使用できます。これができることの例を次に示します。

 MessageBox.Show("The Displayed text in the messagebox", _
         "the text displayed in the title bar", MessageBoxButtons.YesNoCancel, _
             MessageBoxIcon.Error, MessageBoxDefaultButton.Button2)

またはMsgBox、オプションが少なくなりますが、その変数を引き続き使用できます。次に例を示します。

MsgBox("message text", MsgBoxStyle.Information, "title bar text")
于 2013-04-15T19:22:07.437 に答える
0

Visual Basic 2008 では、メッセージ ボックスが短時間だけオンになり、オンになっている時間を可変にする必要がありました。また、拡張画面を使用すると、メッセージボックスがメインのコンピューター画面ではなく拡張画面 (別の形式) に表示されるという問題もありました。これらの問題を克服するために、メイン画面にあるフォームのパネルを使用してカスタム メッセージ ボックスを作成しました。

メッセージ パネルを呼び出すには DoMessage("メッセージ", Seconds, Buttons to show 1 = OK のみ 2 = はい (OK) およびいいえ、3 = はい、いいえ、およびキャンセル。秒が 0 または指定されていない場合は、表示する時間が表示されます。 The panel is set to a long time (10000 seconds) If Buttons to show is not specified it is set to Ok button only. 秒とボタンの両方が指定されている場合、ボタンがクリックされていない場合、パネルはタイムアウト後に非表示になります。

応答は、[OK] または [はい] がクリックされた場合は 1、[いいえ] がクリックされた場合は 2、[キャンセル] がクリックされた場合は 3 です。

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
于 2014-07-04T07:41:56.650 に答える