[C#] - a capo in automatico alla 70° battuta nei textbox

martedì 16 dicembre 2008 - 17.08

alxpei77 Profilo | Newbie

salve! Spero che l'argomento sia pertinente all'area...ma mi sembra di sì.....cmq...
Il mio problema è il seguente:
Condizioni: textbox con proprietà Multiline e wordwrap impostate su true - codice C#
Problema: scrivendo del testo tutto di fila, mi va a capo in automatico quando giunge alla fine della linea in corrispondenza del bordo della textbox.....tuttavia non viene effettivamente inserito un carattere (tipo \n) per andare a capo....ciò comporta che, nel momento in cui recupero il testo della textbox esso viene considerato come un'unica lunghissima stringa.....
Io avrei necessità, nello specifico, di andare a capo al 70° carattere in ogni riga del textbox, con parola non troncata e concatenata, nel caso si modifichi una riga all'interno di una serie di righe, con quella successiva.....la quale, se supera le 70 battute, dovrà a sua volta interrompersi e concatenarsi con la successiva.....e via di seguito....
Qualcuno ha idee su come risolvere il problema???

Io ho trovato banalmente i vari metodi per troncare la linea al 70° carattere (o alla prima parola intera utile - vedi codice qua sotto....) e concatenarla con la successiva facendo un controllo iterativo del carattere....ma ho il problema dell'ultima riga.....come faccio ad aggiungere un nuovo elemento ad un array se già è stato inizializzato? devo usare liste? o ci sono altri metodi che ancora non conosco?

Grazie per eventuali aiuti.

Alessandro

'
for (int i = 0; i < rtb.Lines.Length; i++) //rtb = richtextbox
{
if (rtb.Lines[i].Length > 70)
{
int c = 70;
while (rtb.Lines[i].Substring(c).StartsWith(" ") == false )
{
c--;
}
rtb.Lines[i].Insert(c,"\\n");
}
}

Jeremy Profilo | Guru

>come
>faccio ad aggiungere un nuovo elemento ad un array se già è stato
>inizializzato? devo usare liste? o ci sono altri metodi che ancora
>non conosco?

In c# non esiste, come in vb, il Redim Preserve che ti permetterebbe di ridichiarare un array con le nuove dimensioni del vettore preservandone il contenuto(pur avendo però un calo di prestazioni).....però puoi usare una lista ed, aggiungere degli elementi (in questo caso String) con il metodo Add
Oppure farti, a manina, il Redim Preserve.....quindi ti crei una funzione, al quale passi la tua array, che ti restituisce un nuovo array delle dimensioni da te volute.....il Preserve potresti farlo appoggiandoti ad un array temporaneo nel quale memorizzerai temporaneamente(appunto) il contenuto di quella originale per poi restituirlo come risultato della Function.

Ciao
Tizio

alxpei77 Profilo | Newbie

grazie jeremy...
in effetti mentre attendevo risposte ho continuato a tenere in moto le "cellule grigie" ed ero arrivato anch'io alla scelta di utilizzo delle List<T>.....riguardo al Redim Preserve farò qualche prova, ma credo che la scelta rimarrà sulle List.
Sono al lavoro.....appena ottengo risultati o riscontro altri problemi aggiorno il thread.
grazie ancora!

alxpei77 Profilo | Newbie

dunque.....questo è quello che fin'ora ho prodotto.....non sarà ortodosso ed elegante ma è quasi ciò che volevo.....rimane un piccolo problema che ho indicato nei commenti.....ora cercherò di risolverlo.....se qualcuno ha idee a riguardo o suggerimenti analoghi ma con linguaggio di programmazione più professionale ed elegante sarei lieto di riceverli.......grazie a tutti...rimango in attesa....

ah...dimenticavo....il tutto lo applico ad un richtextbox chiamato rtb1 (ma funziona anche con un textbox) successivamente alla scrittura del testo....non sono riuscito ancora a far funzionare il tutto mentre si scrive il testo.......

questo è il listato.....

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

TOPOAMORE Profilo | Expert

Ciao,
una domanda ma la tua text e lunga 70 caratteri o meno?
ASP 2.0 - VB 2008

alxpei77 Profilo | Newbie

Scusami...non ho capito la domanda....ti riferisci alla textbox (o richtextbox)? In questo caso...no. E' larga un pò di più di 70 battute.....
A me serve andare a capo in automatico alla 70° (ossia che rimangano 69 caratteri in ogni linea della textbox....il motivo non sto a spiegarlo, ma è necessario.... :-)
Comunque ho migliorato ancora un pò quanto postato nello scorso messaggio.....lo riporto più tardi, appena termino gli ultimi dettagli.....ciao!

alxpei77 Profilo | Newbie

Questa è l'ultima variante che, a mio avviso, esegue quello che volevo.....
La posto qua caso mai qualcuno la trovasse utlie, ma soprattutto sarebbero graditi suggerimenti per migliorare il codice e renderlo più professionale......per me è già un gran risultato essere riuscito ad ottenere quello che volevo.....ma sarebbe bello poter aumentare il proprio bagaglio informatico con suggerimenti di gente esperta.....
grazie a tutti comunque.....splendido forum!

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5