Code erstellte controls, wie addhandler einfügen?

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von r0tzi.

    Code erstellte controls, wie addhandler einfügen?

    Huhu :)

    ich hab zwei simple fragen ;) ich möchte controls erstellen, hier mal ein bsp mit buttons und dem Wrap panel.

    Quellcode

    1. Private Sub test()
    2. Dim btn As New Button
    3. btn.Content = "miau"
    4. btn.Height = 50
    5. btn.Width = 100
    6. wrap.Children.Add(btn)
    7. AddHandler btn.Click, AddressOf Feuerfrei
    8. End Sub
    9. Private Sub Feuerfrei()
    10. MsgBox("Feuer")
    11. End Sub


    hiermit erstellt man einen button nach dem anderen in einem wrap panel. jeder button soll ja aber etwas anderes machen, der addhandler ist drin, aber der gilt derzeit für JEDEN erstellen button... möchte ich aber nicht. ich möchte quasi für jeden button z.b. einen link festlegen lassen, der ausgegeben wird wenn er geklickt wird.
    wie realisiert man das am besten? Die anzahl der button ist natürlich unterschiedlich.

    2. Frage: wie bekomm ich einen kleinen abstand zwischen die buttons?

    Vielen Dank
    Hallo

    Du hast es sicher schon mal gehört, aber in der WPf arbeitet man mit Binding. So wie du das hier machst (die Controls von der Code-Behind anzusprechen) wird dir in der Welt der WPF auf den Kopf fallen.

    Wegen deinem Link. Das passt schon so mit dem Handler, du brauchst ihn ja für jeden Button.
    Und wo ist der Link hinterlegt? Im Content hast du nur "miau". Du kannst ihn z.b. im Tag Property hinterlegen und im Handler dann über den Parameter "sender" welcher den Button beinhaltet eben diesen Link abfragen.

    PS: Abstand machst du mittels Margin!

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

    r0tzi schrieb:

    ahhh das wars was ich gebraucht habe

    Was genau?

    Poste doch bitte deinen nun funktionierenden Code damit die Nachwelt auch etwas davon hat. (Es könnte ja jemand mal ein ähnliches Problem haben)

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

    klaro

    hinzufügen des controls:

    VB.NET-Quellcode

    1. Dim Imagebox As New Image
    2. Dim OFD As New System.Windows.Forms.OpenFileDialog
    3. OFD.InitialDirectory = System.AppDomain.CurrentDomain.BaseDirectory
    4. OFD.FilterIndex = 1
    5. OFD.FileName = ""
    6. If OFD.ShowDialog() = Windows.Forms.DialogResult.OK Then
    7. Filepath = OFD.FileName
    8. Else
    9. Exit Sub
    10. End If
    11.  
    12. Imagebox.Width = 40
    13. Imagebox.Height = 40
    14. Imagebox.Margin = New Thickness(8)
    15. Imagebox.Tag = ("Img00" & OFD.FileName)
    16. Imagebox.Source = GetFileIcon()
    17. Wrap_Bar.Children.Add(Imagebox)
    18. AddHandler Imagebox.MouseDown, AddressOf StartProgram


    und übergabe vom Sender

    VB.NET-Quellcode

    1. Private Sub StartProgram(sender As Object, e As RoutedEventArgs)
    2. Dim Tag = (TryCast(e.Source, Image)).Tag.ToString()
    3. Try
    4. Process.Start(Tag.Substring(5, Tag.Length - 5))
    5. Catch
    6. If MsgBox("Can't find the file, would you like to delete it?", vbYesNo) = vbYes Then
    7. Dim Name = (TryCast(e.Source, Image)).Name.ToString()
    8. For Each ctl As Image In Wrap_Bar.Children
    9. If ctl.Name = Name Then
    10. Wrap_Bar.Children.Remove(Wrap_Bar.Children.Cast(Of FrameworkElement).Where(Function(element) element.Name = Name).Single())
    11. Exit For
    12. End If
    13. Next
    14. End If
    15. End Try
    16. End Sub

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