Eigene Messagebox, aber ohne viel am übrigen Code zu ändern

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

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

    Eigene Messagebox, aber ohne viel am übrigen Code zu ändern

    Hallo Leute,

    ich möchte eine eigene, optisch individuelle Messagebox programieren (mit Code und Windows Forms). Das ist ja eigentlich kein Problem.

    Ich möchte aber den Messagebox-Aufruf im vorhandenen Quellcode weiterverwenden ohne diesen irgendwie zu ändern.

    Also alle Messagebox.show() aufrufe sollen automatisch meine eigene Funktion aufrufen.
    Wie "biege" ich das System so um, dass Messagebox.Show nicht die normale Messagebox aufruft, sondern meine selbst programmierte Funktion?

    Vielen Dank für Eure Hilfe.
    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hallo Roland, ich grüße dich.
    Es gab hier mal einen Thread, da wollte jemand eine dunkle MessageBox haben. Ich meine mich zu erinnern, dass das mittels MessageBox.show nicht geht, wurde gesagt. Da hilft nur eins: Eine eigene Form bauen. Ich habe das mal aus Spaß gemacht (deswegen den Emoji-Arm nicht so ernst nehmen haha xD).

    VB.NET-Quellcode

    1. Dim DunkleMessagebox As New MessageboxForm
    2. DunkleMessagebox.uebergebe_Message("arbeitet...")
    3. DunkleMessagebox.Show()


    VB.NET-Quellcode

    1. Public Class MessageboxForm
    2. Private Sub MessageboxForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Me.BackColor = Color.FromArgb(0, 0, 0)
    4. Me.Location = New Point(Form_Main.Location.X + Form_Main.Width, Form_Main.Location.Y)
    5. Button1.BackColor = Color.FromArgb(227, 227, 14)
    6. Button1.ForeColor = Color.FromArgb(54, 54, 51)
    7. Button1.Location = New Point(CInt(Math.Round(Me.Width / 2.0 - Button1.Width / 2.0, 0)), CInt(Math.Round(Me.Height / 2.0 - Button1.Height / 2.0 + 40, 0)))
    8. Label1.Location = New Point(CInt(Math.Round(Me.Width / 2.0 - Label1.Width / 2.0, 0)), CInt(Math.Round(Me.Height / 2.0 - Label1.Height / 2.0, 0)))
    9. Label1.ForeColor = Color.FromArgb(227, 227, 14)
    10. If System.IO.File.Exists(Application.StartupPath & "\arm.png") Then
    11. PictureBox1.Image = Image.FromFile(Application.StartupPath & "\arm.png")
    12. End If
    13. End Sub
    14. Public Sub uebergebe_Message(ByVal message As String)
    15. Label1.Text = message
    16. Application.DoEvents()
    17. End Sub
    18. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    19. Me.DialogResult = DialogResult.OK
    20. Me.Close()
    21. End Sub
    22. Private Sub MessageboxForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    23. If PictureBox1.Image IsNot Nothing Then
    24. PictureBox1.Image.Dispose()
    25. End If
    26. End Sub
    27. End Class



    Edit: Und was ich zu der Zeit noch nicht auf dem Schirm hatte: Die Form in eine klassenweite List(of MessageboxForm) tun und wenn du die nicht mehr brauchst, disposen. Ganz wichtig. Ich hab ja mit Absicht kein Using geschrieben, damit sie nicht sofort verschwindet, daher selbst disposen.

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

    projektintern:

    VB.NET-Quellcode

    1. Friend NotInheritable Class MessageBox
    2. Friend Shared Sub Show(DeineParameter)
    3. 'Dein Code
    4. End Sub
    5. End Class

    bei Dein Code kannst Du dann Dein individuelles MessageBoxForm aufrufen. So habe ich auch meine eigene MessageBox und meine eigene InputBox gemacht.
    Bilder
    • InternalMessageBox.png

      11,42 kB, 616×229, 145 mal angesehen
    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.
    @dive26 Den Klasssen-Namen MessageBox zu verwenden halte ich nicht für gut, weil Du nach einer Weile nicht mehr weißt, welche Box da aufgerufen wird.
    Ich habe auch solch eine Klasse mit 4 überladenen Show()-Prozeduren und diversen Parametern.
    Und Du kannst dieselben Icons wie die originale MessageBox: pictureBox.Image = System.Drawing.SystemIcons.Question.ToBitmap().
    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!
    Mir ist klar um was es ihm geht.
    Es will sein bestehendes Proggi nicht umändern hätte aber gerne eine Optisch andere Box.

    Aber wozu gibt es "Suchen und ersetzen".

    Mach dir eine Massagebox welche die selben überladungen hat und die selben Datentypen verwendet und lass dir den Quellcode automatisch überall ändern so das der neue Namespace verwendet wird.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Aber wozu gibt es "Suchen und ersetzen".
    Hinterher Klasse umbenennen und feddich. ;)
    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!
    Mir ist klar um was es ihm geht.
    Es will sein bestehendes Proggi nicht umändern hätte aber gerne eine Optisch andere Box.

    Aber wozu gibt es "Suchen und ersetzen".


    Wird wohl eh am einfachsten mit Suchen/Ersetzen sein.
    Ich dachte da gibts ihrgend ein "override", das man über Moudle und Forms hinweg dafür einsetzen könnte (auch als Lernfaktor).
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    Nofear23m schrieb:

    Mach dir eine Massagebox
    und poste bitte Deinen Code. Ich hab dauernd Rückenverspannungen. Und da wär so ne Massagebox echt praktisch.
    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.
    Jetzt werden wir aber penibel....
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Habe mir nun eine eigene Messagebox und Inputbox gebaut. Aufgerufen werden beide Funktionen mit identischen Parametern wie die original .NET Funktionen. Rückgabewerte sind ebenfalls identisch.

    Im Prinzip habe ich für beide je eine Windows-Form und eine Function geschrieben.
    Dann habe ich (wie von Euch vorgeschlagen) alle Messagebox.show durch Messagebox_self ersetzt.
    Gleiches mit der Inputbox.
    Bilder
    • InputBox.jpg

      56,15 kB, 1.176×478, 91 mal angesehen
    • Messagebox.jpg

      52,49 kB, 1.176×420, 95 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Tausche mal die Button OK und Abbruch, dann stimmen sie mit der Reihenfolge der Microsoft-MessageBox überein.
    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!