vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Paint auf dynamisch erstellten Button 
Autor: henrikl2000
Datum: 02.08.15 13:43

Hallo,

Wie kann ich auf einen dynamisch erstellten Button zeichnen?

Ich habe es versucht mit
  AddHandler nbRecipe.Paint, AddressOf NbRecipePaint
 
    Private Sub NbRecipePaint(ByVal sender As Object, ByVal e As PaintEventArgs)
        Dim objPen As Pen = New Pen(Color.Blue, 2)
        e.Graphics.DrawRectangle(objPen, 3, 3, sender.Width - 5, sender.Height _
          - 5)
        e.Graphics.DrawEllipse(objPen, 3, 3, sender.Width - 5, sender.Height - _
        5)
            End Sub
Leider ohne Erfolg.
Ich bin für eure Hilfe sehr dankbar.

Gruß,
Henrik
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paint auf dynamisch erstellten Button 
Autor: GPM
Datum: 02.08.15 14:39

Hier mit WithEvents und AddHandler:
Public Class Form1
    Dim WithEvents Btn1 As New Button With {.Width = 130, .Height = 50, .Parent _
      = Me}
    Dim Btn2 As New Button With {.Left = 150, .Width = 130, .Height = 50, _
    .Parent = Me}
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Btn2.Paint, AddressOf Btn2_Paint
    End Sub
 
    Private Sub Btn1_Paint(sender As Object, e As PaintEventArgs) Handles _
      Btn1.Paint
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.FillEllipse(Brushes.Red, e.ClipRectangle)
    End Sub
 
    Private Sub Btn2_Paint(sender As Object, e As PaintEventArgs)
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.FillEllipse(Brushes.Blue, e.ClipRectangle)
    End Sub
End Class
MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paint auf dynamisch erstellten Button 
Autor: henrikl2000
Datum: 02.08.15 16:28

Hallo GPM,

Danke für deine Antwort.
Das funktioniert leider nicht. Vielleicht weil mein Button ein UserControl ist.

Beim Click funktioniert es aber. Und bei MouseClick eben so.
    AddHandler nbRecipe.Click, AddressOf nbRecipeClick
 
 
    Private Sub nbRecipeClick(ByVal sender As Object, ByVal e As EventArgs)
        ' Klik på tilbage knappen
        If DirectCast(sender, NButton).Name = "NcmdBackRecipe" Then
            MsgBox(DirectCast(sender, NButton).Name)
 
            For Each pan As Control In Me.Controls.OfType(Of NPanel)()
                If pan.Name = DirectCast(sender, NButton).Parent.Name Then
                    pan.Location = New Point(Me.Width, 0)
                    pan.Visible = False
                    Do While NpanCategories.Width < Me.Width
                        NpanCategories.Width += 5
                        If NpanCategories.Width > Me.Width Then _
                          NpanCategories.Width = Me.Width
                    Loop
                    NpanCategories.Visible = True
                End If
            Next
        End If
    End Sub
Hier mein Paint für den Button.
Private Sub NbRecipePaint(ByVal sender As Object, ByVal e As PaintEventArgs)
        Dim objPen As Pen = New Pen(Color.Blue, 2)
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.FillEllipse(Brushes.Blue, e.ClipRectangle)
    End Sub
Und bei Erstellung von den Button
AddHandler nbRecipe.Paint, AddressOf NbRecipePaint
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paint auf dynamisch erstellten Button 
Autor: Manfred X
Datum: 02.08.15 20:49

Hallo!

Deinen Code habe ich nicht näher angeschaut.
Welche Routine steht wo? Was bedeuten die Variablenbezeichner?
Welches Ereignis soll wo verarbeitet werden?

Hier ein Usercontrol mit dynamisch erstellten Buttons und Ereignisroutinen.
Public Class ucButtons
 
    Public Sub New(ParamArray btnTexte() As String)
        InitializeComponent()
 
        Dim t As Integer
        For Each text As String In btnTexte
            t += 30
            Dim btn As New Button With _
               {.Parent = Me, .Text = text, .Top = t, .Width = 300}
            AddHandler btn.Click, AddressOf buttonclick
            AddHandler btn.Paint, AddressOf buttonpaint
        Next text
        Me.Height = t + 30
        Me.Width = 320
    End Sub
 
 
    Private Sub buttonclick(ByVal sender As Object, e As EventArgs)
        MessageBox.Show(DirectCast(sender, Button).Text & " ist angeclickt" & _
          "worden")
    End Sub
 
 
    Public Sub buttonpaint(ByVal sender As Object, e As PaintEventArgs)
 
        Using br As New SolidBrush(Color.Red), _
              brt As New SolidBrush(Color.Black)
 
            e.Graphics.FillRectangle(br, e.ClipRectangle)
 
            e.Graphics.DrawString(DirectCast(sender, Button).Text, _
                    New Font("Arial", 10), brt, _
                    e.ClipRectangle.Top + 2, e.ClipRectangle.Left + 2)
        End Using
    End Sub
End Class
Und hier das anwendende Formular.
Public Class frmButtons
 
    Dim ucb As New ucButtons _
         ("Wo", "liegt", "das", "Problem?") With {.Parent = Me}
 
End Class


Beitrag wurde zuletzt am 02.08.15 um 20:56:37 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Paint auf dynamisch erstellten Button 
Autor: henrikl2000
Datum: 03.08.15 10:07

Hallo Manfred,

Danke für deine Antwort.
Es ist ein bisschen schwierig zu erklären.

AddHandler nbRecipe.Click, AddressOf nbRecipeClick
AddHandler nbRecipe.Paint, AddressOf NbRecipePaint
Steht in den Sub wo der Button erstellt werde.
Ich verstehe nicht ganz was du mit Variablenbezeichner meinst.

Mein UserControl ist ein dll die ich in ein anderes Projekt verwende.

Es muss an mein dll liegen. Ich habe gerade einen normalen Button gemacht mit den obengenannten AddHandler und auf dem Button wird ein Ellipse gezeichnet.

Aber bitte verschwende nicht mehr von deiner Zeit damit. Ich habe es gelöst mit eine extra Funktion in mein dll.

Vielen Dank noch für die Hilfe.

0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel