vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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
Klasse mit Button-Array 
Autor: Ortech
Datum: 20.12.16 17:17

Hallo,

ich habe eine Klasse mit mehreren Buttons (Array) erstellt.
ich erstelle ein Objekt in einer Form.
die Buttons werden auf die Form gezeichnet.
Wenn ich auf einen dieser Buttons klicke, möchte ich ,dass ein Dialog (Panel mit Dropdownboxen) sich öffnet, wo ich Eigenschaften des angeklickten Buttons ändere.

Nur wenn ich das Panel mit den Controls auf die Form zeichne/erstelle, kann ich ja nicht über die Klasse/Objekt drauf zugreifen, denn das Panel ist dann ja kein Member der Klasse.
Wie erstelle ich dann das Panel? In der Klasse selber? Wenn ja, wie?

Daran scheitere ich gerade. Habe überhaupt keinen Plan.
Ideen herzlich willkommen...

danke,

ortech
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Klasse mit Button-Array 
Autor: Manfred X
Datum: 21.12.16 10:51

Hallo!

Du könntest die Buttons in einem Tablelayoutpanel anordnen
und ein Dialogformular erstellen.
Etwa so ...
Public Class ButtonTable
    Inherits TableLayoutPanel
 
    Dim buttonlist As New List(Of Button)
 
    Public Event Button_Clicked _
      (ByVal sender As Object, e As EventArgs)
 
    Public Sub New()
        Me.ColumnCount = 1
    End Sub
 
 
    Public Sub Add(text As String)
        Dim btn As New Button With {.Text = text}
        AddHandler btn.Click, AddressOf button_click
        AddHandler btn.MouseDown, AddressOf Button_MouseDown
 
        buttonlist.Add(New Button With {.Text = text})
        Me.Controls.Add(btn, 1, Me.RowCount)
    End Sub
 
 
    Private Sub button_click(ByVal sender As Object, e As EventArgs)
        'Click-Event an Formular weiterleiten  
        RaiseEvent Button_Clicked(sender, e)
    End Sub
 
 
    Private Sub Button_MouseDown(sender As Object, _
        e As System.Windows.Forms.MouseEventArgs)
 
        If Not e.Button = _
           Windows.Forms.MouseButtons.Right Then Exit Sub
 
        If Not TypeOf sender Is Button Then Exit Sub
 
        Dim btn As Button = DirectCast(sender, Button)
 
        'Dialog erstellen, ausführen und Rückgabe verarbeiten
        Using ButtonDlg As New ButtonDialog
            With ButtonDlg
                .Buttontext = btn.Text
                If .ShowDialog = DialogResult.OK Then
                    btn.Text = .Buttontext
                End If
            End With
        End Using
    End Sub
 
End Class
 
 
'Dialogformular
Public Class ButtonDialog
    Inherits Form
 
    Dim lbltext As New Label With _
             {.Parent = Me, .Text = "Button-Text", .Width = 120}
    Dim txttext As New TextBox With _
             {.Parent = Me, .Width = 120, .Left = 130}
 
    Dim btnok As New Button With _
             {.Parent = Me, .Text = "OK", .Top = 50, _
              .DialogResult = Windows.Forms.DialogResult.OK}
 
    Dim btnCancel As New Button With _
             {.Parent = Me, .Text = "Abbrechen", _
              .Top = 50, .Left = 130, _
              .DialogResult = Windows.Forms.DialogResult.Cancel}
 
 
    Public Property Buttontext As String
        Set(value As String)
            txttext.Text = value
        End Set
        Get
            Return txttext.Text
        End Get
    End Property
 
    Private Sub ButtonDialog_Load(sender As Object, _
                    e As System.EventArgs) Handles Me.Load
        Me.Size = New Size(220, 100)
        Me.Text = "Button einrichten"
    End Sub
End Class
Anwendungsbeispiel:
Public Class frmButtonTableDemo 'WinForms-Formular
 
    Dim WithEvents ba As New ButtonTable With {.Parent = Me}
 
 
    Private Sub frmButtonArray_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        ba.Add("BTN 1")
        ba.Add("BTN 2")
 
    End Sub
 
 
    Private Sub ba_Button_Clicked(sender As Object, _
        e As System.EventArgs) Handles ba.Button_Clicked
 
        Dim btn As Button = DirectCast(sender, Button)
 
        MsgBox(btn.Text & " ist betätigt worden")
    End Sub
 
End Class


Beitrag wurde zuletzt am 21.12.16 um 10:54:49 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Klasse mit Button-Array 
Autor: Ortech
Datum: 21.12.16 11:23

danke für deine Mühe.
Ich würde aber lieber folgend vorgehen:

Das Panel zum Setzen der Eigenschaften eines Button Objekts in der Forme erstellen und die hier gesetzten Eigenschaften auf das Objekt übertragen (z.B: Text des Button).

Der Eventhandler für den Button ist in der Klasse enthalten.
Wenn ich auf ein Button Objekt aus der Form heraus draufklicke, öffnet sichdas Panel, wo ich in einer Dropdownbox einen Wert einstelle (Button Text z.B.). Auf diesem Panel ist auch ein Button "overtake". Dieser Wert soll aufs Objekt übertragen werden.
wie also öffne ich eine Form-Panel aus der Klasse heraus?
Und wie übertrage ich einen Wert durch das Drücken eines "overtake" Buttons,der auf der Form platziert ist, ins Objekt?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Klasse mit Button-Array 
Autor: Manfred X
Datum: 21.12.16 12:38

Ich bin mir nicht sicher, ob ich wirklich verstanden habe,
was Du erreichen möchtest.

Ich vermute, du hast eine ButtonArray-Klasse erstellt und auf der Form
eine Instanz eingerichtet, sowie einen Dialog auf einem Panel -
eine Instanz ebenfalls auf der Form.

Im Prinzip benötigt die Klasse, die dein ButtonArray enthält
öffentliche Eigenschaften, auf die die Änderungen, die im Dialog
vorgenommen werden, im Formular zugewiesen werden.
Diese (indizierten) Eigenschaften geben in der ButtonArray-Klasse
die zugewiesenen Werte auf die internen Buttons - gemäß Index - weiter.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Klasse mit Button-Array 
Autor: Ortech
Datum: 21.12.16 12:44

genau so ist es.
Habe gerade von Folgendem erfharen :

modelviewcontroller mvc

Noch nie davon gehört. Könnte das die Lösung sein?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Klasse mit Button-Array 
Autor: Manfred X
Datum: 21.12.16 13:25

Hallo!

Diesen Begriff kenne ich als "design pattern".
http://stackoverflow.com/questions/122388/how-would-you-implement-mvc-in-a-windows-forms-application
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Klasse mit Button-Array 
Autor: Ortech
Datum: 21.12.16 14:14

hört sich interessant an, werd mich da mal reinlesen. Danke für die Infos.
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