Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Articolo di giornale in VB.NET

Disporre e formattere il testo su due o più colonne
Disporre e formattere il testo su due o più colonne
Link copiato negli appunti

In questo articolo, verrà fornito il codice VB.NET per realizzare un testo a due colonne (simili a quelle dei giornali) partendo da un testo immesso in una text-area.

Prima di entrare nel vivo del codice, osserviamo come graficamente appare la maschera di inserimento del testo:

Per realizzare il form appena proposto si utilizza il seguente codice:

'Codice lato Client
<Form runat="Server">
<textarea id="myText" cols="50" rows="10" runat="server"></textarea>
<br>
<asp:Button id="elabora" runat="server" text="Elabora
Testo" onClick="mostra" runat="server" />
</form>
<table width="460" border="1" cellspacing="0"
cellpadding="5" bordercolor="#000000" id="myTable"
runat="server">
<tr>
<td valign="top" width="50%">
<asp:Label id="colonna1" runat="server" />
</td>
<td valign="top" width="50%">
<asp:Label id="colonna2" runat="server" />
</td>
</tr>
</table>

Il codice appena mostrato può essere ulteriormente suddiviso in due
parti:

  • La prima, è quella compresa tra il tag <form> ed il tag </form>. Tra questi due tag, vi è la costruzione di una textarea ed il relativo pulsante di invio del form.
  • La parte successiva è la realizzazione di una tabella di due colonne per una riga. Sorge spontanea una domanda.: "Come mai non si vede nulla sotto l'immagine?" La risposta la anticipo ora anche se verrà trattata in seguito. Grazie ai controlli html offerti da vb.net è possibile scegliere la dimensione della tabella prima che la pagina venga elaborata e prodotta a video.

Ora entriamo nel merito dello script. Osserviamo come dalla semplice form di
acquisizione si passa alla pagina finale contenente l'articolo suddiviso in due
colonne.

'Parte lato server
<%@ Page language="vb" %>
<script runat="server">
Sub page_load(obj As object, e As EventArgs )
' Nascondo la tabella. ORA non serve
myTable.width = 0
myTable.border = 0
End sub
Sub mostra(obj As object, e As EventArgs )
'Pulisco le colonne del testo elaborato
colonna1.text=""
colonna2.text=""
'Controllo se ho del testo da analizzare
If trim(myText.value)="" then
'Se non vi è testo, viene abbandonata la sub routine
Exit Sub
End If
'Dichiaro ed inizializzo le variabili
Dim strTesto As String
strTesto = myText.value
Dim arrParole As Array
arrParole = Split ( strTesto, " " )
Dim intParole As integer
intParole = UBound ( arrParole )
Dim intMezzo As integer
intMezzo = CInt (intParole / 2 ) + 1
Dim ctInd As integer
ctInd = 0
If intParole > 0 Then
For ctInd = lbound(arrParole) to intMezzo
colonna1.text += arrParole(ctInd) & " "
Next
For ctInd = (intMezzo + 1 ) to ubound(arrParole)
colonna2.text += arrParole(ctInd) & " "
Next
End If
'Riattivo la tabella
myTable.width = 460
myTable.border = 1
End Sub
</script>

Al primo avvio della pagina, viene eseguita di default la sub routine page_load.
Nel caso specifico di questo script questa routine contiene:

Sub page_load(obj As object, e As EventArgs )
' Nascondo la tabella. ORA non serve
myTable.width = 0
myTable.border = 0
End sub

Il suo compito, come anticipato in precedenza, è quello di render invisibile
all'utente finale la tabella che conterrà il testo suddiviso in due colonne.
Ora ci chiediamo come sia possibile. Se osservate il codice della tabella notate
la seguente proprietà:

<table ... id="myTable" runat="server">

Assegnando un id e la voce runat="server" è possibile collegare anche la tabella al server tramite l'id specificato.

L'altra sub routine presente

Sub mostra(obj As object, e As EventArgs )
' ... codice della ub routine ...
end sub

ha il compito di prelevare il testo immesso nella textarea e di trasformarlo
in articolo di due colonne come mostrato nella seguente figura.

Una volta avuto l'accesso alla sub-routine, viene effettuato tramite le seguenti righe di codice VB.NET l'effettivo inserimento del testo. Se non vi è testo, la sub-routine viene abbandonata.

'Controllo se ho del testo da analizzare
If trim(myText.value)="" then
'Se non vi è testo, viene abbandonata la sub routine
Exit Sub
End If

Se si rimane all'interno della sub-routine, significa che vi è del
testo da incolonnare. Come prima operazione, si memorizza il testo all'interno
di una variabile. Partendo da tale variabile, si conteggiano le parole separandole tramite gli spazi sfruttando l'istruzione split. Poi, occorre sapere quante sono le parole troverete e in modo da inserire omogeneo tra le due colonne. Ciò è possibile grazie a due cicli a contatore (il classico ciclo for). Il primo concatena tutte la parole da porre nella prima label e nello stesso modo agisce il secondo ciclo for per la seconda label. Naturalmente, l'indice iniziale del secondo ciclo, sarà quello finale del primo incrementato di uno.

Dim strTesto As String
strTesto = myText.value
Dim arrParole As Array
arrParole = Split ( strTesto, " " )
Dim intParole As integer
intParole = UBound ( arrParole )
Dim intMezzo As integer
intMezzo = CInt (intParole / 2 ) + 1
Dim ctInd As integer
ctInd = 0
If intParole > 0 Then
For ctInd = lbound(arrParole) to intMezzo
colonna1.text += arrParole(ctInd) & " "
Next
For ctInd = (intMezzo + 1 ) to ubound(arrParole)
colonna2.text += arrParole(ctInd) & " "
Next
End If

Nella parte finale, viene riattivata la tabella in modo da mostrare il testo
appena elaborato e posizionato in precedenza nelle due label.

'Riattivo la tabella
myTable.width = 460
myTable.border = 1

Per il corretto funzionamento dello script, bisogna posizionare all'interno
della pagina .aspx prima la parte lato server ed in seguito la parte lato client.

Ti consigliamo anche