Newsgroup: it.comp.lang.visual-basic
Titolo: button a runtime

Come posso fare per creare un array di button a runtime e gestirne anche
gli eventi ? Corregetemi se sbaglio ma la keyword WithEvents  non
accetta array
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

[Stefano Falasca] ha scritto
Come posso fare per creare un array di button a runtime e gestirne anche
gli eventi ? Corregetemi se sbaglio ma la keyword WithEvents  non
accetta array
uhm.... mi sembra che tu non possa "creare" a run time un array di
controlli: lo crei, anche con un solo elemento, in design time, poi, in run
time, gli puoi aggiungere altri elementi. Qiundi in design time fai la
routine di gestione dell'evento dell'array, che conterrà come parametro
anche l'indice dell'elemento dell'array che ha "scatenato" l'evento...
Salutoni
Sergio

 wrote in message
news:DhGF9.6199$fa.2...@news1.tin.it...

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002

 controllo e' presente a runtime.
Potresti fare un esempio, per favore?
Ehm, possibilmente senza scrivere 8000 righe di codice.
In quel caso preferisco crearmi un controllo con Index=0 a livello di
progetto.

[Emiliano Bruni] ha scritto, quotando come più comodo faceva a lui....
 No...dal VB6 e' possibile creare controlli a runtime anche se nessun
controllo e' presente a runtime.
Per la gestione degli eventi pero' il problema rimane.
(snip)
Sottolineo che il post originale parlava di:
[stefano falasca]
Come posso fare per creare un array di button a runtime e gestirne anche
gli eventi ?
e la mia risposta diceva:
[cssoft]
uhm.... mi sembra che tu non possa "creare" a run time un array di
controlli
Quindi, se ti prendi la briga di smentirmi, per favore afferma:
"in vb6 è possibile creare array di controlli al run time"
Salutoni
Sergio

 Ehm, possibilmente senza scrivere 8000 righe di codice.
Ne servono molte meno....questo e' il codice, preso dalla documentazione
microsoft, su come aggiungere controlli a runtime. Analizza un po tutte le
casistiche (controllo standard, con licenza, utilizzando l'oggetto
VBControlExtended)
Non fa la gestione dell'array in quanto per quella servono un po' piu' di
righe di codice...(ma nemmeno molte poi)
Crea un nuovo progetto exe, doppio click sul form...cancella tutto il codice
esistente e aggiungi il codice sotto....vedrai apparire una treeview, un
commandbutton e un textbox magicamente!!!
CIAO
Option Explicit
' If you are adding an ActiveX control at run-time that is
' not referenced in your project, you need to declare it
' as VBControlExtender.
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlText As VB.TextBox
Dim WithEvents ctlCommand As VB.CommandButton
Private Sub ctlCommand_Click()
   ctlText.Text = "You Clicked the Command button"
End Sub
Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
   ' test for the click event of the TreeView
   If Info.Name = "Click" Then
      ctlText.Text = "You clicked " & ctlDynamic.object.selecteditem.Text
   End If
End Sub
Private Sub Form_Load()
   Dim i As Integer
   ' Add the license for the treeview to the license collection.
   ' If the license is already in the collection you will get
   ' the run-time error number 732.
   Licenses.Add "MSComctlLib.TreeCtrl"
   ' Dynamically add a TreeView control to the form.
   ' If you want the control to be added to a different
   ' container such as a Frame or PictureBox, you use the third
   ' parameter of the Controls.Add to specify the container.
   Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _
                    "myctl", Form1)
   ' set the location and size of the control.
   ctlDynamic.Move 1, 1, 2500, 3500
   ' Add some nodes to the control.
   For i = 1 To 10
      ctlDynamic.object.nodes.Add Key:="Test" & Str(i), Text:="Test" _
                                        & Str(i)
      ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), _
                           Relationship:=4, Text:="TestChild" & Str(i)
   Next i
   ' Make the control visible.
   ctlDynamic.Visible = True
   ' add a textbox
   Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
   ' Set the location and size of the textbox
   ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
                 1, 2500, 100
   ' Change the backcolor.
   ctlText.BackColor = vbYellow
   ' Make it visible
   ctlText.Visible = True
   ' Add a CommandButton.
   Set ctlCommand = Controls.Add("VB.CommandButton", _
                    "ctlCommand1", Form1)
   ' Set the location and size of the CommandButton.
   ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
                    ctlText.Height + 50, 1500, 500
   ' Set the caption
   ctlCommand.Caption = "Click Me"
   ' Make it visible
   ctlCommand.Visible = True
End Sub


 treeview, un commandbutton e un textbox magicamente!!!
Ok, grazie. Come dicevi, resta il problema degli eventi...

 "in vb6 è possibile creare array di controlli al run time"
bhe , secondo me il punto principale non e' quello, ma ,come sottolinea
lupo, se questo metodo e' + veloce/semplice/sicuro di creare un controllo a
index=0 e poi loadarli !