Forum: VB.NET |
Thema:
Controls zur Laufzeit inkl. Events |
Von:
G. Guest (
20.10.2004 13:40) |
Hi Leute!
Habe mich mal an das Problem mit dem erstellen von
Controls zur Laufzeit und deren Events beschäftigt.
Ich habe hier eine Lösung, die allerdings in VBA
geschrieben ist, aber auch in VB .NET ähnlich sein
muss. (Hatte leider kein .Net Framework zur Hand, sondern
nur Excel).
Als erstes habe ich mir ein Formular gebastelt.
Ein Button, eine ComboBox und noch einen Button.
Zur Laufzeit sollen Labels eingefügt werden, die
dann per „Drag and Drop“ auf dem Formular
verschoben werden können.
Zunächst erstellen wir eine Klasse die die Events
der Labels beinhaltet. Die Klasse habe ich
„clsLabelHandler“ genannt. Der Inhalt sieht
folgendermaßen aus:
-----------------------------------------------------------
Public WithEvents lblHandler As MSForms.Label
Private help As Single 'Für drag and Drop
Private actMouseX As Single 'Für drag and Drop
Private actMouseY As Single 'Für drag and Drop
Private Sub lblHandler_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
'merken das Taste gedrückt ist
help = 1
'Mausposition merken
actMouseX = X
actMouseY = Y
'In den Fordergrund
lblHandler.ZOrder 0
End Sub
Private Sub lblHandler_MouseMove(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
'Wenn Taste gedrückt dann
If (help = 1) Then
'neue Position des Labels bestimmen
lblHandler.Left = lblHandler.Left + X - actMouseX
lblHandler.Top = lblHandler.Top + Y - actMouseY
End If
End Sub
Private Sub lblHandler_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
'Taste wieder losgelassen
help = 0
End Sub
-----------------------------------------------------------
In dem Formular benötigt Ihr folgende zusätzliche
Variablen:
-----------------------------------------------------------
Dim UserFormLabels() As New clsLabelHandler
Dim WithEvents lbl As MSForms.Label
Dim count As Integer
Dim col As New Collection
-----------------------------------------------------------
Wir benötigen jetzt eine Funktion, die den neu erzeugten
Labels die Events zuweist. Der Code sieht folgendermaßen aus:
-----------------------------------------------------------
Private Sub SetEventToLabel()
Dim Steuerelement As Control
ReDim Preserve UserFormLabels(1 To count)
If TypeName(lbl) = "Label" Then
Set UserFormLabels(count).lblHandler = lbl
End If
End Sub
-----------------------------------------------------------
In das Click-Ereignis des ersten Buttons kommt nun der Code, der die neuen Labels erzeug:
-----------------------------------------------------------
Set lbl = Me.Controls.Add("Forms.Label.1", "lbl_" & count, True)
With lbl
lbl.Top = 6 + (count * 21)
lbl.Left = 15
lbl.Width = 80
lbl.Height = 20
lbl.Caption = lbl.Name
lbl.BackColor = &HC0FFFF
lbl.BorderStyle = fmBorderStyleSingle
End With
'****************************************
'Das ClickEvent zuweisen
'
SetEventToLabel
'****************************************
'Label in Liste übernehemen
'
col.Add lbl
ComboBox1.AddItem lbl.Name
-----------------------------------------------------------
Mit dem zweiten Button wollen wir die Farbe des Labels
Ändern, welches wir in der ComboBox ausgewählt haben.
Dafür sieht der Code so aus:
-----------------------------------------------------------
If Not ComboBox1.ListIndex = -1 Then
col.Item(ComboBox1.ListIndex + 1).Caption =_
"Geändert " + CStr(ComboBox1.ListIndex + 1)
col.Item(ComboBox1.ListIndex + 1).BackColor = &H80C0FF
End If
-----------------------------------------------------------
Das wärs eigentlich schon. Wie gesagt, ist das ein Beispiel für VBA.
Wenn jemand das in .Net umbaut, kann er es ja hier posten!
Gruß
Tobi
Betreff |
Von |
Datum |
|
  |
Re: Controls zur Laufzeit inkl. Events
Hi,<br>das ist ganz einfach legt einfach im Designer Dein Control an un schau im "Vom Windows Form Designer generierter Code" was er da gemacht hat. Genau das mußt Du auch machen:<br><br>Friend WithEvents... |
 |
 |
 |
|
|
G.
Guest
|
21.10.2004 11:15 |
|
  |
Re: Controls zur Laufzeit inkl. Events
Ja das ist mir auch klar, aber es ging mir hier nicht<br>um ein oder zwei, bei denen ich vorher schon weiss,<br>das ich sie brauche. Die kann ich mir dann ja auch im<br>Designer dahinschieben. Mir ging es... |
 |
 |
 |
|
|
G.
Guest
|
22.10.2004 16:10 |
|
  |
Re: Controls zur Laufzeit inkl. Events
Das was der Kollege vorher geschrieben hat, funktioniert schon so. Du kannst damit beliebig viele Controls hinzufügen. Es wird duch den ADDHANDLER für jedes neu hinzugefügte Control auch der jeweilige... |
 |
 |
 |
|
|
G.
Guest
|
22.10.2004 17:15 |
|
  |
Re: Controls zur Laufzeit inkl. Events
Na dann mach es doch so wie der Kollege im ersten Beitrag. Schreibe für jedes Control eine eigene Handler-Klasse und weise bei der Erstellung eines Controls die jeweilige Klasse dem Control zu. Z.B.... |
 |
 |
 |
|
|
G.
Guest
|
25.10.2004 15:22 |
|
  |
Re: Controls zur Laufzeit inkl. Events
naja, so weit, so gut. aber was mache ich, wenn ich zur entwurfszeit noch nicht weiß, was welches control machen soll.<br><br>die genaue problemstellung sieht so aus:<br><br>ich habe ein fenster, in welches... |
 |
 |
 |
|
|
G.
Guest
|
25.10.2004 18:32 |
|
  |
Re: Controls zur Laufzeit inkl. Events
Ok,<br>hier noch mal die koreckte Lösung:<br> Private mButtonList As New ArrayList<br><br> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br><br> ... |
 |
 |
 |
|
|
Klaas
Wedemeyer
|
26.10.2004 12:50 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!