Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] Problema

Ciao
ho questo problema:
ho una ventina di textbox del tipo a e una ventina del tipo b. es:
a1    b1
a2    b2
a3    b3
    ..
a20    b20
queste text sono collegate l'un l'altra, al cambiare della proprietą text di
a1, cambia il contenuto di b1.
Io gestisco tutto in una routine:
Private Sub Texts_TextChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles a1.textchanged, a2.textchanged...
ora dovrei fare un select case sul sender per modificare le text b di
conseguenza, ma siccome a1 -> b1, a2 -> b2... c'č un modo per sfruttare
questa relazione?
Con vb6 avrei creato due matrici di controlli per poi sfruttare la variabile
index, ma qui come faccio?
grazie

Prova questo...
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles MyBase.Load
        TextBox1.Tag = Button1
        TextBox2.Tag = Button2
    End Sub
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e 
As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged
        Dim txt As TextBox = DirectCast(sender, TextBox)
        Dim b As Button = DirectCast(txt.Tag, Button)
        If (Not b Is Nothing) Then b.Text = txt.Text
    End Sub
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
Weblog: 
http://www.ugidotnet.org/710.blog

         If (Not b Is Nothing) Then b.Text = txt.Text
Credo che il controllo sul Nothing vada fatto prima: non mi pare che il
DirectCast si comporti come l'"as" di C#.
Ciao
-- 
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 HTH
mi dice che non posso fare un cast di questo tipo.. come mai?
grazie per la risposta




Soriah,
dire magari qual'e' la riga che genera l'eccezione e' chiedere troppo?


 dire magari qual'e' la riga che genera l'eccezione e' chiedere troppo?
hai perfettamente ragione, scusami..
allora:
Dim txt As TextBox
txt = DirectCast(sender.Tag, TextBox) <--- L'eccezione viene generata qui.
(Cast specificato non valido)
[...]
If dr.HasRows Then
    sender.text = dr.Item("Nome")
    txt.Text = dr.Item("Costo")
End If
i tag delle textbox li ho assegnati in fase di progettazione
ciao e grazie ancora

Spiegami come fai ad assegnare una Textbox alla proprieta' Tag a design time 
che mi interessa proprio..., per favore non dirmi che hai scritto 
"Textbox1"...
Ri dai un occhiata al mio codice


 Visual Basic (2005)
scusate se mi intrometto con una domanda fuori contesto... ma che differenza
cè tra DirectCast e CType?
io fino ad ora ho usato ctype in questo modo:
private sub miaSub(sender as object, ....)
    dim txt as textbox=ctype(sender,textbox)
    select case 
txt.name
    ....
    ...
end sub
quale dei due è meglio usare e perche?
GRAZIE

CType e' un operatore di conversione, DirectCast di cast, il primo
accetta anche dei value types
Ovvero:
 Dim s As String = CType(1, String)    'OK
 Dim t As String = DirectCast(1, String) 'Err
Non dovendo prevedere la possibilita' di conversione ne deriva che
DirectCast e' leggermente piu' performante.
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
Weblog: 
http://blogs.ugidotnet.org/corrado/

 DirectCast e' leggermente piu' performante.
GRAZIE

 Ri dai un occhiata al mio codice
purtroppo te lo devo dire.. ho fatto cosě :/
puoi spiegarmi la differenza?
inoltre devo fare tutti questi asssegnamenti (a1.tag=b1  [..] a2.tag = b2)
per forza?
(come avrai potuto notare sono molto newbie :))
ciao e grazie

> puoi spiegarmi la differenza?
forse ci sono arrivato. Se do un valore alla proprietą a design time la
prende come una stringa mentre se la do a run time la prende come un
oggetto. E, scusami ancora, siccome sta nascendo l'esigenza di avere anche
c1...c20 non potrei assegnare al tag un valore intero (tipo 1) e poi fare
una cosa del tipo ctype("a" & sender.tag, textbox) ?
ci ho provato ma non va..
grazie per le risposte
ciao

probabilmente non riesco a fare una cosa del genere perché non si può
effettuare la conversione da string a textbox.
Comunque ho risolto tutto usando un usercontrol :)
ciao e grazie di tutto

 una cosa del tipo ctype("a" & sender.tag, textbox) ?
Devi usare reflection
vediamo se a memoria ci riesco
Imports System.Reflection
Dim fi As FieldInfo = My.GetType().GetField("a" & DirectCast(sender,
TextBox).Tag)
Dim text As TextBox = DirectCast(fi.GetValue(sender), TextBox)


 (come avrai potuto notare sono molto newbie :))
No prob, forse pero' e' il caso che ti studi un po di OOP, altrimenti non 
andrai lontano con .NET
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
Weblog: 
http://blogs.ugidotnet.org/corrado/