DialogResult für CustomControls

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    DialogResult für CustomControls

    Heyho,

    Ich würde gerne für CustomControls eine DialogResult Property implementieren.
    Der Plan war simpel:

    VB.NET-Quellcode

    1. Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
    2. If FindForm() IsNot Nothing Then FindForm.DialogResult = _DialogResult
    3. MyBase.OnMouseClick(e)
    4. End Sub


    Dennoch wird, durch diesen Aufruf, die Eigenschaft der Form nicht verändert, obwohl die Form gefunden wird.
    Wo mache ich etwas falsch?

    Danke im Vorraus!
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo

    Wenn ich das richtig verstehe hast du einen Button welcher nicht von Button erbt. Korrekt?

    Hier würde ich mal sagen das dir OnMouseclick zum einen nicht reicht. Auch Enter und Click aus das Control muss abgefangen werden.
    Weiters müsste ESC dann für DialogResult.IsCancel abgefangen werden.

    OK, soweit die Theorie. Ich würde ein Property mit einem Enumerator in deine klasse schrieben welche für den Buton definiert werden kann was er nun machen soll. True oder False

    Was hast du denn in _DialogResult? In Winforms gibts da glaube ich nur True oder False.
    Ich denke aber das du im gefundenen Form die zwei Propertys CancelButton und AcceptButton setzen müsstest. diese Properties erwarten aber wieder ein Object vom Typ IButtoncontrol.

    Ich werde das mal versuchen hier nachzustellen, vieleicht kommst du in der Zwischenzeit ja eh selbst drauf.

    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. ##

    Ich erbe eben von Control. DialogResult gibt bei einem StandardButton einen Wert vom Enum "DialogResult" zurück (nicht True/False).
    Deswegen versuche ich exakt das Selben bei meinem Button (der nicht von Button erbt). Das _DialogResult Objekt sowie die dazugehörende Eigenschaft sind ebenfalls "DialogResult" Elemente.

    Folglich verstehe ich nicht wieso sich einfach gar nichts tut, wenn ich versuche die Eigenschaft der Form zu verändern.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo

    Also, ich habe das nun versucht indem ich einfach ein Control erstellt habe. Man ist WinForms lange her. :(
    Also, du darfst nicht DialogResult zurückgeben. Ich bin nicht mehr Fit in WinForm und weis jetzt nicht warum.

    Habe es nun so auf die schnelle implementiert und geht.

    VB.NET-Quellcode

    1. Private Sub ButtonTest_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles Me.MouseDoubleClick
    2. If SetDialogResult Then
    3. Dim frm As Form = FindForm()
    4. If frm IsNot Nothing Then
    5. frm.DialogResult = CType(DialogResult, DialogResult)
    6. End If
    7. End If
    8. End Sub
    9. Public Property SetDialogResult As Boolean = False
    10. Public Property DialogResult As MyDialogResult
    11. Public Enum MyDialogResult
    12. None = 0
    13. OK = 1
    14. Cancel = 2
    15. Abort = 3
    16. Retry = 4
    17. Ignore = 5
    18. Yes = 6
    19. No = 7
    20. End Enum


    Wenn ich jetzt im Designer das Property SetDialogResult auf True setze und das Property DialogResult auf OK wird alles Korrekt übergeben und die Form geschlossen.

    Habe es so geprüft und klappt:

    VB.NET-Quellcode

    1. Dim f As New TestForm
    2. Dim res = f.ShowDialog
    3. MessageBox.Show(res.ToString)


    Das Property SetDialogResult kannst du dir eigendlich sparen wenn du für DialogResult per Default None behaltest.

    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. ##

    Nagut. Mir ist ein peinlicher Fehler passiert den ich nicht bedacht hatte.
    DialogResult kann logischerweise nur gesetzt werden, wenn die Form via. ShowDialog aufgerufen wird. Ich hatte sie als Standardformular, und folglich passierte deswegen nichts!

    Dennoch danke dir!
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Nofear23m schrieb:

    VB.NET-Quellcode

    1. frm.DialogResult = CType(DialogResult, DialogResult)
    Da kannste doch intern gleich das WinForm-Enum verwenden, da musste nicht casten.
    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!
    Hallo

    Hatte ich versucht und -1 zurückbekommen. Warum auch immer.

    Grüße
    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. ##

    @RodFromGermany Mach ich sowieso. Problem war wie gesagt etwas peinlich. Hatte den Aufruf der Form nicht mit .ShowDialog gemacht
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!