Umgang mit If und Verbindung mit MessageBox

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Umgang mit If und Verbindung mit MessageBox

    Hallo Community,

    es ist für euch wahrscheinlich ein recht einfaches Problem, aber ich stehe derzeit ziemlich auf dem Schlauch (ich denke gerade eher von der Logik her). Ich habe eine If-Bedingung, wenn diese nicht erfüllt wirt, soll er aber nicht aus der If rausgehen, sondern in der Form bleiben.

    Ich kann euch einfach mal meinen Code zeigen, vielleicht versteht der eine oder andere ja schon, was ich möchte.

    VB.NET-Quellcode

    1. Imports System.Management
    2. Imports System.Windows.Forms
    3. Imports Convicu.GlobalErrorHandler
    4. Public Class frmHostname
    5. Private Sub btnHostnameOK_Click(sender As Object, e As EventArgs) Handles btnHostnameOK.Click
    6. Try
    7. If String.IsNullOrEmpty(txtBxHostnameNew.Text) Then
    8. 'Throw New Exception("")
    9. Else
    10. Dim objManagementPath As New ManagementPath(String.Format("Win32_ComputerSystem.Name='{0}'", System.Environment.MachineName))
    11. Dim objComputerSystemClass As New ManagementObject(objManagementPath)
    12. Dim objRenameParameters As ManagementBaseObject
    13. objRenameParameters = objComputerSystemClass.GetMethodParameters("Rename")
    14. objRenameParameters("Name") = txtBxHostnameNew.Text
    15. objComputerSystemClass.InvokeMethod("Rename", objRenameParameters, Nothing)
    16. btnHostnameOK.Enabled = False
    17. End If
    18. Catch ex As Exception
    19. DialogResult = DialogResult.Cancel
    20. Throw New Exception(ex.ToString)
    21. End Try
    22. End Sub
    23. Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    24. Me.Close()
    25. End Sub
    26. End Class


    Derzeit löse ich es so, dass er eine Exception fliegen lässt. Das ist, mehr oder weniger, in Ordnung. Ich möchte halt, wenn er erkennt, dass die Textbox leer ist, das ne MsgBox fliegt, er aber in der Form bleibt.

    Viele (hirnlich matschige) Grüße
    Toorms
    Was meinst Du mit "in der Form bleiben"? Hättest Du gar keinen Code, würde das Formular da sein und nix machen. Mit welcher der gezeigten Codezeilen glaubst Du, das das Form(ular) geschlossen wird? Ich kann nix erkennen. Achso, ja. Jetze. Das Form wird doch nur durch den Befehl DialogResult = geschlossen. Pack diese Zeile dorthin, wo sie eben passt.

    VB.NET-Quellcode

    1. Private Sub btnHostnameOK_Click(sender As Object, e As EventArgs) Handles btnHostnameOK.Click
    2. If String.IsNullOrEmpty(txtBxHostnameNew.Text) Then MessageBox.Show("blablabla"): Exit Sub
    3. Try
    4. Dim objManagementPath As New ManagementPath(String.Format("Win32_ComputerSystem.Name='{0}'", System.Environment.MachineName))
    5. Dim objComputerSystemClass As New ManagementObject(objManagementPath)
    6. Dim objRenameParameters As ManagementBaseObject
    7. objRenameParameters = objComputerSystemClass.GetMethodParameters("Rename")
    8. objRenameParameters("Name") = txtBxHostnameNew.Text
    9. objComputerSystemClass.InvokeMethod("Rename", objRenameParameters, Nothing)
    10. btnHostnameOK.Enabled = False
    11. Catch ex As Exception
    12. DialogResult = DialogResult.Cancel
    13. End Try
    14. End Sub

    Reicht Dir das ggf. schon?

    EDIT: MessageBox vergessen und hiermit nachgereicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    @Toorms Mal sehen, ob ich das verstanden habe:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btnHostnameOK_Click(sender As Object, e As EventArgs) Handles btnHostnameOK.Click
    2. If String.IsNullOrEmpty(txtBxHostnameNew.Text) Then
    3. MessageBox("TextBox ist empty")
    4. Return
    5. End If
    6. Try
    7. Dim objManagementPath As New ManagementPath(String.Format("Win32_ComputerSystem.Name='{0}'", System.Environment.MachineName))
    8. Dim objComputerSystemClass As New ManagementObject(objManagementPath)
    9. Dim objRenameParameters As ManagementBaseObject
    10. objRenameParameters = objComputerSystemClass.GetMethodParameters("Rename")
    11. objRenameParameters("Name") = txtBxHostnameNew.Text
    12. objComputerSystemClass.InvokeMethod("Rename", objRenameParameters, Nothing)
    13. btnHostnameOK.Enabled = False
    14. Catch ex As Exception
    15. MessageBox(ex.ToString, "Exception")
    16. End Try
    17. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Morgen zusammen,

    leider hat das nichts geholfen. Bei mir ist es so aufgebaut:

    frmMain.vb
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btnConfHostname_Click(sender As Object, e As EventArgs) Handles btnConfHostname.Click
    2. Try
    3. Dim objDialogResult As DialogResult
    4. Using objHostname As New frmHostname
    5. objDialogResult = objHostname.ShowDialog()
    6. End Using
    7. If objDialogResult = DialogResult.OK Then
    8. ProgressSuccess(lblConfHostname, "Hostname Settings are successfully configured!", "Hostname.prg", "1")
    9. End If
    10. Catch ex As Exception
    11. ProgressFailure(lblConfHostname, ex, "Hostname.prg", "0")
    12. End Try
    13. End Sub


    Mit dem Using wird dann das frmHostname.vb aufgrufen, welches gestern schon zu sehen war:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Management
    2. Imports System.Windows.Forms
    3. Imports Convicu.GlobalErrorHandler
    4. Public Class frmHostname
    5. Private Sub btnHostnameOK_Click(sender As Object, e As EventArgs) Handles btnHostnameOK.Click
    6. If String.IsNullOrEmpty(txtBxHostnameNew.Text) Then MessageBox.Show("blablabla") : Exit Sub
    7. Try
    8. Dim objManagementPath As New ManagementPath(String.Format("Win32_ComputerSystem.Name='{0}'", System.Environment.MachineName))
    9. Dim objComputerSystemClass As New ManagementObject(objManagementPath)
    10. Dim objRenameParameters As ManagementBaseObject
    11. objRenameParameters = objComputerSystemClass.GetMethodParameters("Rename")
    12. objRenameParameters("Name") = txtBxHostnameNew.Text
    13. objComputerSystemClass.InvokeMethod("Rename", objRenameParameters, Nothing)
    14. btnHostnameOK.Enabled = False
    15. Catch ex As Exception
    16. DialogResult = DialogResult.Cancel
    17. Throw New Exception(ex.ToString)
    18. End Try
    19. End Sub
    20. Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    21. Me.Close()
    22. End Sub
    23. End Class


    Per Klick wird im frmMain wird frmHostname aufgrufen. Auf Click-Event wird dann im frmHostname geprüft, ob der String empty ist. Wenn ja, wird eine Messagebox ausgeworfen. Wenn in der Messagebox auf OK geklickt wird, geht auch das frmHostname mit zu. Das soll eben nicht.

    Hoffe das war ein wenig besser erklärt. :S

    Vielen Dank erstmal an euch!
    Toorms

    *** UPDATE ***

    Verspricht, dass es unter uns bleibt. Hatte im "Configure" Button in den Eigenschaften den "Dialogresult" auf OK stehen. Ja. Ich rufe auf via ShowDialog(). Wenn dieser bei OnClick ein DialogResult.OK bekommt, ist es halt auch OK. Ob er Programmierer will oder nicht. Danke euch! Urlaub.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Toorms“ ()

    Nein, kann ich nicht nachvollziehen. Das läuft bei mir anders ab, nämlich so, wie erwartet, siehe Anhang.
    btw: Du kannst Dir die MiniSub mit btnClose folgendermaßen ersparen: Leg im Designer in den Formulareigenschaften CancelButton: btnClose fest. Dann ist dem Compiler klar, dass Du den Dialog abbrechen willst, wenn Du auf btnClose klickst
    Dateien
    • WindowsApp1.zip

      (244,9 kB, 76 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Toorms schrieb:

    VB.NET-Quellcode

    1. Try
    2. 'xyz
    3. Catch ex As Exception
    4. DialogResult = DialogResult.Cancel
    5. Throw New Exception(ex.ToString)
    6. End Try
    ist völlig identisch mit

    VB.NET-Quellcode

    1. 'xyz

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!