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