Newsgroup: it.comp.lang.visual-basic
Titolo: [?] TextBox multiline con scrollbar...

Salve,
ho una textbox multiline e con scrollbar verticale. Ad essa viene assegnato
del testo da un'altra parte di programma (insomma non e' l'utente a scrivere
direttamente in essa...). C'e' un modo, in questo caso, per far scorrere
automaticamente la scrollbar man mano verso il basso, in modo da
visualizzare automaticamente l'ultima riga inserita, e non la prima (come
succede normalmente e si deve poi andare giu' con la scroll da soli...)?
Grazie, spero di essermi spiegato bene:)

 Grazie, spero di essermi spiegato bene:)
text1.seltext=testo 'questo metodo è più veloce del classico text1=text1 +
testo però devi star attento che il cursore sia posizionato nel posto giusto
e che non sia selezionato testo....
dopo l'append del testo
text1.selstart=700000;'non serve dare un valore preciso ,la textbox
controlla sempre :))
ciao

"Malkavian" <Malkavian*@SoftHome.net> wrote in message

Text1.SelStart = Len(Text1.Text)
- Non usare _mai_ soluzioni sommarie!
- Per concatenare stringhe usa "&" e non "+".
- Per aggiungere testo in coda conviene fare:
Text1.SelStart = Len(Text1.Text)
Text1.SelText = NuovoTesto
------------
Questa è una risposta ritenuta inutile e maleducata da alcuni partecipanti.
(Campagna contro l'idiozia galoppante nei NG)

 text1.selstart=700000;'non serve dare un valore preciso ,la textbox
qui non è ASSOLUTAMENTE necessario usare len(text1.text) in quanto viene gia
"effettuato" il controllo all'interno del textbox.Sarebbe stupido effettuare
le operazioni 2 volte
piccola precisazione però doverosa
----------------------------------
Campagna contro gli altezzosi

 piccola precisazione però doverosa
leggasi "come deviare le giovani menti".

 ca%%o".
se almeno spiegassi il perchè....
mi dovresti dire il motivo di ripetere le cose 2 volte ?
magari prima di parlare prova...
lasciamo sempre perdere  il modo con cui ti rivolgi alle persone
ormai...

 ormai...
Boh...
Sarete gentili voi.

 le operazioni 2 volte
Al limite potrei convenire sul superfluo ma stupido decisamente no.
Intanto nessuno ti garantisce che in un futuro il controllo non venga
"impreziosito" con una verifica di congruenza sulla property, magari
sollevando un "educata" eccezione che ti schianta il programma, ma a parte
questo...
- text1.selstart=Len(text1.text) e' estremamente piu' leggibile da chiunque
dia un occhiata al codice rispetto a text1.selstart=700000, che poi magari
in un altra form dello stesso programma e' = 800000 0 = 9999999 perche' non
ti ricordi piu' quanto avevi usato dall'altra parte e cose del genere...
- usare Len(text1.text) e' anche piu' portabile, pensa al caso in cui decidi
di rimpiazzare il TextBox con un RichTextBox dove il contenuto puo' superare
di gran lunga quel valore... d'accordo, puoi usare un valore piu' grande, ma
perche' darti pensiero? e poi di nuovo, e' leggibile text1.selstart=
2147483647
?
La manciata di cicli cicli di clock che puoi sprecare con un Len() in questo
caso ti viene ampiamente ripagata in sonni tranquilli.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Sarete gentili voi.
perchè non la smetti di fare battaglie contro mulini a vento e valuti le
situazioni e le persone per quelle che sono ??
Ma un po di umiltà nulla eh ????
Perchè vuoi imporre le tue regole ?
perchè chiedi di rispettare qualcosa e poi non rispetti niente e nessuno ?
ma ti hanno insegnato ad esprimerti in quel modo ?
Perchè hai tutta questa voglia di far vedere quanto sei bravo ??
se ti facessi qualche domanda in più e magari ti dessi qualche risposta in
più,non faresti queste pessime figure..


cambiare un controllo usato da milioni d'applicazioni è alquanto "stupido"
:))
però con microsoft non si sa mai
ovvio rimane il solito mio parere :)))
ciao
ps per sbaglio ho postato in e-mail sorry

 ma sono punti di vista
[SNIP]
...infatti avevo detto "al limite", perche' a dirla tutta secondo me non e'
nemmeno superfluo.
Comunque come giustamente dici, sono sempre punti di vista, e per quanto mi
riguarda non solo resto convinto delle mie considerazioni sulla portabilita'
ma anche del fatto che codice di quel tipo sia illeggibile.
In questo sono d'accordo con Zanna (non nei modi), nel suggerire cioe' che
non siano consigli particolarmente brillanti da dare a chi vuole imparare.


 non siano consigli particolarmente brillanti da dare a chi vuole imparare.
Rimango ovviamente del mio parere perchè credo sia giusto (come spiegato
sopra).La leggibilità del codice puo essere valida anche con valori costanti
(magari commentati).
ciao


però qui hai letto male io ho scritto selstart :)))
giusto per la precisione (mi sono accoero anch'io oslo adesso della tua
svista...)
ciao :))

 un errore lo si fa spesso.
Su questo siamo d'accordo
la mia obiezione, nel caso specifico, e' che il significato del valore
costante non e' cosi' chiaro, la perdita di velocita' nello scrivere la
versione "pulita" e' prossima a zero, e che certe malizie sarebbe meglio non
venissero suggerite come regola a chi sta iniziando ... tutto qui.


 venissero suggerite come regola a chi sta iniziando ... tutto qui.
se non le insegnano chi conosce queste piccole malizie chi dovrebbe farlo ?
:)))
cmq quello che dici anche secondo me non è sbagliato ...penso sia questione
di gusti...
ciao :))))

di gusti...
Imho quando programmo, se posso, lascio da parte i miei gusti.
E se qualcuno mi fa notare certi pericoli/errori (grazie H.P.L. ;-)
ne sono ben lieto.
-- 
ciao, hal

 ne sono ben lieto.
se non sei fiducioso dei tui gusti...son sempre gusti :))

 forse non hai letto bene.
Ha letto bene, e non e' stato l'unico a leggere bene. Chi invece non ha
letto bene sei, forse, tu: come gia' ti e' stato ripetuto 2 volte, se
oggi la TextBox non puo' contenere piu' di 32K caratteri e fa dei
"check" in automatico quando tenti di assegnargli un SelStart piu'
"alto" della lunghezza del testo, cio' potrebbe non essere piu' valido
in futuro (e ho dei dubbi anche sulle attuali TextBox di NT/2000).
Inoltre se un giorno dovessi decidere di riutilizzare lo _stesso
identico_ codice sostituendo la TextBox con una RichTextBox rischi bug
per aver pensato (erroneamente) di ottimizzare il codice basandoti su un
check automatico o su un limite del controllo.
L'errore e' concettuale. Cio' detto sei libero di continuare a
"rischiare", l'invito e di non portarti dietro ignari neo-programmatori
formandoli con errati presupposti.
Happy Coding =)
Lokar

 check automatico o su un limite del controllo.
ripeti le stesse cose gia discusse?
non servi a nulla :))
(mica ti posso dare le stesse risposte all'infinito rileggi tutto il thread
e impara qualcosa)
se non hai nulla da dire in più non ho capito a cosa serve il tuo intervento
?
che ci fai il riassunto ?

 controllo interno
Appunto "controllo interno".
Assolutamente libero di programmare a CDC, rinnovo l'invito di non
deviare i neo-programmatori.
Lokar.PlonkingState = vbPSWaitingForConfirmation

 che ci fai il riassunto ?
Beh, ormai la discussione mi sembra impantanata, per cui non credo sia utile
continuare...
comunque francamente l'impressione e' che tu non abbia colto il punto a cui
volevamo farti arrivare, per questo Lokar ha riassunto di nuovo il concetto,
che ripeto per l'ultima volta:
i millisecondi che "stupidamente" sprechiamo per fare un assegnazione
formalmente corretta (e perlomeno sulla forma non penso tu possa obiettare;
io abito "in fondo" a via Balestrazzi, non "al civico 65536 che tanto
finiscono prima" :-)) ci permettono di risparmiare su quella singola
istruzione qualche secondo moltiplicato per tutte le istruzioni da
verificare, quindi un gran bell'ordine di grandezza in piu', per ogni futura
implementazione che ci possa venire in mente/imposta... vedi tu.


 Lokar.PlonkingState = vbPSWaitingForConfirmation
bravo non rispondere più e soprattuto con cose gia dette
non sono qui per litigare,son qui al limite per discutere con persone meno
altezzzose e spocchiose di te.


ma scusa non ne abbiamo gia parlato di questa cosa???
Ti ho gia detto che non sono sbagliati entrambi i metodi .......
Se poi tu vuoi mettere 3000 controlli fallo......
Ormai ci sono computer che supportano velocità adatte.....
Vuoi fare un software super sicurro ?????
Spreca ilt uo tempo con mille routine di sicurezza nesusno te lo
vieta.......
Mettere un controllo dove gia esiste è stupido.La selstart  puo essere solo
un esmpio nel dire che non è possibile inserirli su ogni proprietà o
funzione che oltretutto gia li possiede di suo.
Guarda cne a me non frega nulla di avere ragione e ne cerco appoggi e tanto
meno appoggio solo per dar fastidio.Se non vuoi discutere ma vuoi solo aver
ragioni dimmelo che te la do.....
In discussioni a due di solito non si danno verdetti ma soluzioni.
Il dire di aver ragione è sempre poco intelligente soprattutto quando ci
sono diverse soluzioni.
Però non intendo continuare se vuoi solo litigare..

 altezzzose e spocchiose di te.
Goodbye!
Lokar.PlonkingState = vbPSPlonkConfirmed

 difficile cambiare mentalita' ed accettare i propri errori.
e insite nel dire che sono errori ......ma cosa ne sai ???
Il fare una cosa 2 volte quello è un errore ...........
poi come dici tu e condivido, sta diventando tedioso..
addios

 Però non intendo continuare se vuoi solo litigare..
Per quanto mi riguarda, no: e' grazie a programmi
scritti con i criteri da te esposti che mi guadagno
da vivere :-)
-- 
ciao, hal
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 vieta.......
Non generalizziamo; qui non si sta parlano di 3000 controlli
supercomplicati, ma di casi in cui, al costo praticamente nullo in termini
di stesura del codice, scrivi codice piu' corretto, piu' leggibile, piu'
manutenibile e, sai cosa ?!, anche piu' efficiente!!
Non ci credi? fai questa piccola prova:
'In una form con un pulsante e un textbox multiline
Private Sub Command1_Click()
Dim STime As Long, i As Long
Text1.Text = String(2000, "#")
Text1.Refresh
STime = Timer
For i = 1 To 5000
    Text1.SelStart = 0
    Text1.SelStart = Len(Text1.Text)
Next
Debug.Print "A: " & Timer - STime
STime = Timer
For i = 1 To 5000
    Text1.SelStart = 0
    Text1.SelStart = 65535
Next
Debug.Print "B: " & Timer - STime
End Sub
Buon divertimento


 sono diverse soluzioni.
Mi ero ripromesso di non intervenire.
1) hai dato una soluzione iniziale di _pessimo_ stile di programmazione
2) hai pensato bene di puntualizzare, tanto per dimostrare il _pessimo_
livello di stile di programmazione
3) sei stato ripreso da alcuni fra i migliori sviluppatori di questo Ng
4) una persona dotata di un minimo di umiltà (per usare parole tue)
avrebbe almeno provato a riflettere sulle ragioni che hanno indotto
diverse persone a rettificare i suoi consigli.
5) Invece no: io programmo da 20 anni in c, delphi e chi più ne ha più ne
metta...
A me personalmente vengono i brividi nel sentire uno sviluppatore
C così approssimativo e pressapochista.
A meno che il tuo lavoro sia creare bugs, nel qual caso,
non dubito della efficacia del tuo stile di sviluppo.
Cortesemente, però, _non_ trasmettere questo stesso stile a un
principiante che, magari, dovrà produrre degli applicativi
funzionanti e manutenibili.
ciao
ugo

 'In una form con un pulsante e un textbox multiline
[cut]
Questa poi non me la sarei aspettata!
Ne ho fatto 4 piccoli exe e li ho eseguiti
una volta sola, ma i risultati parlano chiaro,
anche con diversi altri programmi non proprio
leggerissimi (due istanze di visual studio, fra
il resto) aperti.
Ecco cosa e' venuto fuori:
pCode
Con 65535: 	7.908
Con Len(...): 	1.14
native - small - no opt.
Con 65535: 	7.789
Con Len(...): 	1.021
native - small - adv. opt.
Con 65535: 	7.849
Con Len(...): 	1.043
native - fast - no opt.
Con 65535: 	7.275
Con Len(...): 	1.456
native - fast - adv. opt.
Con 65535: 	7.476
Con Len(...): 	1.657


 C così approssimativo e pressapochista.
dimostriamo la tua inutilità invece................
1) non hai detto nulla inerente  alla discussione
2) è gia da un paio di thread che cerchi di litigare per difendere il tuo
amico zanna (come sta facendo l'altro amico hal e lokar).Non capisco il
perchè volete imporre la vostra volonta sul newsgroup.
3) non leggi i thread visto che mi dici che voglio aver ragione dove esprimo
pareri
5) impara tu un po di umiltà....
se esprimo pareri e non giudizi dove la vedi la poca umiltà ?

 manutenibile e, sai cosa ?!, anche piu' efficiente!!
per curiosità ho provato però (almeno sul mio computer i valori sono
diversi)
A: 9,828125
B: 9,765625
A: 9,5
B: 9,46875
A: 9,640625
B: 9,625
A: 10,046875
B: 9,21875
A: 9,734375
B: 9,71875
non so quanto siano affidabili magari in seguito proverò con più caratteri.
però la prova che hai effettuato sarà sicuramente utile in seguito :))
finalmente qualcosa di utile e se giusta (sicuramente lo sarà per le prime
prove sono un po ambigue) sarà utilissima
ciao

 perchè volete imporre la vostra volonta sul newsgroup.
Ce l'ho fatta!!!!!
Era dai tempi di Moreno che non mi davano del "coccolatore"...  :)))))))
ciao
ugo.official.coccolator is back... !!!!!!

 Era dai tempi di Moreno che non mi davano del "coccolatore"...  :)))))))
fare l'ironico conferma quanto era meglio che non ti intromettessi
magari leggi meglio il thread prima di sparare sentenze fuori luogo ....
Adesso aspetti i tuoi amici per fare il buffone ? :)))))))
ps. impara  a ragionare non a fare il pecorone....

 perchč volete imporre la vostra volonta sul newsgroup.
Non lo capisci perche' il fatto non sussiste.


 Non lo capisci perche' il fatto non sussiste.
guarda che ti conosco  e vi leggo da un po so benissimo come vi coalizzate
per imporre la vostra volontà :))
ti aggreghi sempre per dare man forte ai tuoi amici......
e non solo tu......
dare ragione a persone che usano parole poco consone a quello che è lo
spirito del newsgroup non è sicuramente una nota di merito.
Sul newsgroup si discute e si da una mano a chi ne ha bisogno e non si fnano
lotte per far vedere quando si è bravi....(senza fare nomi)
Il dire :
1) qui deve parlare solo chi esperto
2) qui si devono porre domande solo se si hanno 10 anni di programmazione
alle spalle
3) i novellini ci fnano schifo
4) siamo bravi solo noi.....
ti sembrano discorsi da newsgroup ?
ma per favore.............................

 ma per favore.............................
Prego.


 No.
almeno su questo siamo d'accordo :))
i post di zanna , gbc non ti dicono proprio nulla ????
però se non vuoi esprimerti ma solo nascondere l'evidenza possiamo finirla
anche qui non siamo obbligati a continuare
ciao :)

 ha scritto
luca, ugo, hal, lokar
(e non hallokar :)
io l'ho ammesso, non ho visto il troll.
ammettiatelo anche voi, su.
non e' cosi' difficile.
ciao, j.len(j)
mo' cosa mi tocca a me ?
scommettiamo che lo gia' ?
a buon conto: paliocco.plonk

 i post di zanna , gbc non ti dicono proprio nulla ????
Non ne condivido i modi, pero' li capisco.


 Non ne condivido i modi, pero' li capisco.
sui modi siamo ancora d'accordo......(ti avverto che mi piacciono solo le
donne non vorrei essere troppo d'accordo hahahha :)))))))
prima hai detto che non condividi l'f1 ,il dire di  leggere msdn,e nel
censurare i newbbini...
su cosa sei d'accordo ????
ciao :)))

paliocco,
prima che ci mandino (e con ragione) a fare in cu|0 tutti e due,
possiamo proseguire, se credi, via mail privata.
Abilito il tuo indirizzo a passare i filtri ;-)
-- 
ciao, hal

 assolutamente no visto che ho parlato di protezioni che gia esistono
Dunque: uso Win2000.
- Metto una textbox (normale) su un form.
- Faccio Text1.Text = Space$(70000) ' nota 70.000
- Faccio Text1.SelStart = 65536 'Come da te suggerito
- F5.
Il programma compila.
Il programma non da errori (per fortuna)
Il programma non fa quello che mi aspetto (e che farebbe correttamente su un
Win9x).
Se questo non è un bug dettato da pressapochismo spiegami cosè.
E soprattutto chi lo spiegherà ai federali che il disarmo delle cariche
nucleari è avvenuto solo su 65536 ordigni anzichè su tutti e due i miliardi
come da preventivo?
La discussione mi pare davvero superflua.
Comunque, ognuno è liberissimo di farsi saltare in aria, basta che lo faccia
lontano da me.
Ciao

 sulla stabilità essendo più basso ) visto che parli di stabilità...
Niente, è come sbattere contro un muro di gomma :)
Il tuo sistema non è solo non performate, ma semplicemente NON funziona.
Come ti ho dimostrato nel post poco più sopra.
E dire cambio il valore non ti salva, perchè dovresti passarti tutto il
codice alla ricerca di numeri casuali.
E mentre tu sarai al telefono arrampicato su uno specchio per calmare il
cliente, io starò già lavorando alla prossima commessa, poichè il mio, di
programma, non ha necessitato di nessuna ricompilazione (aggiustata con il
mio metodo, perchè ti sfido a trovare un sistema migliore funzionante sia
per NT/2000 che per W9x).
A me sembra invecie che sei proprio tu a voler sostenere ad ogni costo tesi
strampalate.
Ad un certo punto basta!
Come diceva Andreotti "Occorre negare tutto e sempre, anche l'evidenza".
Ciao

 dal trascurare certi principi.
Hal, mi faresti un favore ?
Smetti di dar corda a 'sto troglione... ha dimostrato quel
che è da almeno una decina di post.
Un Paperino Paliocco.Plonk = True

 sulla stabilità essendo più basso ) visto che parli di stabilità...
***Prima e unica risposta ad un troll conclamato.***
Giusto un controesempio, e guarda caso pare tu abbia scelto
l'esempio più sbagliato che potessi fare.
Tu metti il limite a 65000, anzi siamo precisi e diciamo
che lo metti a 65534. Poi la M$ cambia idea, e decide (come
in effetti pare abbia già fatto, non so se lo sai) che la RichEd20.dll
diventa il default per i controlli testo, oltre che per l'RTF.
Come si troverà un tuo utente quando inserisce, diciamo,
66000 caratteri nella tua textbox ?
A 476 caratteri dalla fine, anziché alla fine... e questo potrebbe,
anzi dovrebbe, succedere fra poco, lo sai ?
A proposito, cerca nell'MSDN Unicode, tanto per divertirti,
e vedi dove va a finire il tuo conteggio dei bytes, su alcuni
sistemi.
Ah, puoi anche evitare di rispondere, se pensi che questo
ti faccia sentire meglio, tanto sei già nel mio KF.
Addìo, G.

 Se questo non è un bug dettato da pressapochismo spiegami cosè.
non ti rispondo all'altro post insieme al tuo amico perchè son comparse le
solite volgarità
prova questo
Private Sub Command1_Click()
Text1.Text = Space$(70000) ' ho notato 70.000
Text1.Text = Text1.Text & "f" 'questo per controllare che il buffer è pieno
a 65535 e non viene aggiunta
Text2 = Len(Text1.Text) 'compare il solito 65535
Text1.SelStart = 65535
Text1.SetFocus
End Sub
non so cosa hai provato ma il programma funziona perfettamente e alla nasa
avranno ancora un il puntatore al solito posto :))
(io l'ho provato su xp)
magari prova meglio  :)))
poi basta perchè certe prove le puoi fare anche da solo senza stressare il
sottoscritto....
e poi ti ho gia detto impara un po di umiltà e di educazione (insegnane un
pochino anche a paperino ) :))))

 e poi ti ho gia detto impara un po di umiltà e di educazione
Imparerò da te grande Lama di pace e serenità.
Ancora ho peccato pensando che qualcun'altro al di fuori di te potesse
sputare ingurie sugli altri.
Io ho letto solo una grande tracotanza da parte tua e tutti possono
verificarlo e testimoniarlo leggendo questo trhead.
zanna.dontfeedtheanimals(true)
zanna.readonly(true)


figurati la mia arroganza è palese la tua invece è solo bontà d'animo :))
Quei post così carini dove ti esponi con i rametti d'ulivo in mano ci
trasportano tutti in  un mondo di pace e di fratellanza(c'è il sottofondo di
note soavi).
Ascoltatelo e seguite il suo esempio poveri mortali  .
la pace sia con te :))


ma non c'è più nulla da discutere figurati ..
però il tuo disaccordo su certi modi e argomentazioni dovresti manifestarlo
soprattutto a chi dai man forte in altri post :))
ciao e alla prossima :))


cmq visto che usi questi termine sarà il tuo abuse a verificare quanto puoi
dire queste parole....
adesso provvederò a segnalarti ....
vedremo.........

 adesso provvederņ a segnalarti .... vedremo.........
OOOPS, avevo sbagliato la riga su Hamster, e mi č capitato di
leggere questo post. Approfitto per favorirti, guarda: il mio IP
(quello che vedi) č 194.185.107.186, che risolve in "
ilcentro.it
".
Quindi manda pure la tua segnalazione ad abuse [chiocciola] 
ilcentro.it
,
che non vedo l'ora di leggerla. Prometto di risponderti. :-)
(Oh, magari ti tocca aspettare un paio di giorni, che domani e
dopo sono di riposo, e torno domenica al lavoro.)
Anzi, adesso ti splonko per bene. Chissą, magari mi fai fare
un po' di risate ogni tanto.
P.S.: Hai ragione, ho sbagliato nell'usare il termine "troglione",
mi sono scordato di metterci il copyright, che č di "Micio Nero"
di IDLM.
Bye, G.

Ragazzi, grazie, ho risolto...ho anche provato un altro metodo: usare il
metodo Upto del controllo RichTextBox...
Grazie ancora:)
Ciao, Malk
PS: Comunque non vi azzuffate troppo:) Senno' una semplice domanda tecnica,
anziche' avre una risposta tecnica, avra' solo flame flame flame...