Pillole di codice

Indice

A) Mouse
  1. Indicazione posizione mouse con riferimento allo schermo
  2. Indicazione posizione mouse con riferimento al Form
  3. Sposta il mouse dalla posizione corrente ad un’altra
  4. Creare nel Form uno spazio Hotspot  nel quale il Mouse diventa attivo
  5. Limitare l’operatività del mouse ad uno spazio predefinito
  6. Rappresentare in una Label le attività del Mouse

B) Files e cartelle
  1. Creare una cartella
  2. Cercare e aprire una cartella
  3. Elencare le Subdirectory di una Cartella
  4. Elencare i file di una cartella e leggerne il contenuto
  5. Creare un file txt e salvarlo in una cartella
  6. Creare un file Excel e salvarlo
  7. Creare un file Excel in cui salvare i dati di un Array
  8. Cercare un file .txt e copiarlo in una RichTextBox
  9. Cercare un file .txt usando un filtro
  10. Caricare un file .rtf in un RichTextBox mantenendo la formattazione
  11. Caricare un file .rtf in un RichTextBox e selezionare una linea




A) MOUSE

1. Indicazione posizione mouse con riferimento allo schermo
Creare un Form e inserire due TextBox e un Timer. Impostare la proprietà “Enabled” del Timer1 a True
Nel Timer inserire le due righe seguenti:

        TextBox1.Text = System.Windows.Forms.Cursor.Position.X.ToString
        TextBox2.Text = System.Windows.Forms.Cursor.Position.Y.ToString


Nota : Le posizioni sono espresse in numero di pixel corrispondenti alla risoluzione dello schermo (1920x1080 in questo caso).  X=0 e Y =0 corrispondono all’angolo in alto a sx dello schermo



2. Indicazione posizione mouse con riferimento al Form
Creare un Form con una Label. Copiare la seguente Sub subito sotto “Public Class Form1”

Private Sub form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 

Me.MouseMove
Label1.Text = "Il mouse si trova in  X: " & e.X & " Y: " & e.Y
If e.X > 200 Then
            Me.BackColor = Color.Red
        Else
            Me.BackColor = Color.Yellow
        End If
     End Sub

 Lo sfondo del Form è giallo. Se il valore di ascissa di  X è  > 200 diventa rosso.
L’etichetta informa sul valore X della posizione del mouse.


Nota: Le posizioni sono espresse in numero di Pixel.
 X e Y sono = 0 in corrispondenza dell’angolo superiore sinistro del Form.
Nota: In alternativa al copia e incolla: Creare il Form con una Label. In Esplora soluzioni click su Visualizza Codice. Nella barra di sinistra sopra la finestra del codice, click su Form1 e quindi su Eventi Form1. Nella barra di destra clic su Dichiarazioni e quindi su MouseMove: nella finestra del codice comparirà la Sub MouseMove. Al suo interno scrivere o copiare le linee dalla nr 3 (Label1) alla nr 8 (End If).


3. Sposta il mouse dalla posizione corrente ad un'altra
Creare un Form e un Button. Inserire nel Button le righe seguenti:

        Me.Cursor = New Cursor(Cursor.Current.Handle)
        Cursor.Position = New Point(Cursor.Position.X - 50, Cursor.Position.Y - 50)
        Cursor.Clip = New Rectangle(Me.Location, Me.Size)

Cliccando Button1 il cursore viene spostato a sinistra di 50 pixel e in alto di 50 pixel



 4. Creare nel Form uno spazio Hotspot nel quale il mouse diventa attivo
Creare un Form con un “PictureBox”. Allargare le dimensioni del PictureBox fino ad occupare quasi tutto il Form. Inserire il seguente listato subito sotto la “Public Class Form1”

    Dim hotspot1 As Rectangle = New Rectangle(100, 100, 250, 250)

    Private Sub PictureBox1_MouseClick(ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
        If hotspot1.Contains(e.X, e.Y) Then
            Beep()
        End If
    End Sub


    Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If hotspot1.Contains(e.X, e.Y) Then
                  Cursor = Cursors.Hand
        Else
                  Cursor = Cursors.Default
        End If
    End Sub


Quando il cursore è all’interno del rettangolo di hotspot1 il cursore viene attivato e da freccia diventa una mano (Sub 2). Cliccando il tasto sinistro del mouse suona un Beep (Sub 1).

Nota : Le coordinate del rettangolo Hotspot partono da 0,0 nell’angolo alto a sinistra del PictureBox (non del Form)


5. Limitare l'operatività del mouse ad uno spazio predefinito
Creare un nuovo progetto con un Form, due Button ed un Panel. Allargare il Formo fino a portarlo a 800 x 600. Dimensionare il Panel su 300 x 300. I due Button sono posti a sinistra del Panel.

Doppio clic su Button1 e inserire il seguente codice:

Windows.Forms.Cursor.Clip = New Rectangle(Me.Panel1.Left + Me.Left + 5, _
 Me.Panel1.Top  + Me.Top + 23, Me.Panel1.Width, Me.Panel1.Height)

Doppio clic su Button2 e inserire il seguente codice:

Windows.Forms.Cursor.Clip = New Rectangle(Me.Left, Me.Top, Me.Width, Me.Height)

Doppio clic su Button3 e inserire il seguente codice:

Close()

Il Button1 è operativo soltanto all’interno del Panel, il Button2 è operativo soltanto all’interno del Form. Il Button3 chiude l’applicazione



6. Rappresentare in una Label le attività del mouse

Creare un nuovo progetto con un Form e una Label. Allargare il Form fino a portarlo a 800 x 600.
Sotto Public Class Form1 inserire le seguenti righe di codice:

Private Sub Form1_MouseEvent(ByVal sender As ObjectByVal e As MouseEventArgs) _ Handles MyBase.MouseDown, MyBase.MouseUp, MyBase.MouseMove, MyBase.MouseWheel

        Label1.Text = String.Format("Mouse: Buttons={0} x={1} y={2} Clicks={3} Delta={4}", e.Button, e.X, e.Y, e.Clicks, e.Delta)
    End Sub

Nella Label1 verranno date le seguenti informazioni:
-    Tasto premuto
-    Posizione X
-    Posizione Y
-    Clic singolo o doppio
-    Senso di rotazione della rotella (+120 = in avanti, -120 = indietro)




   B) FILES E CARTELLE




1. Creare una nuova cartella
Creare un nuovo progetto con un Form. Cliccare sul Form1 per entrare in visualizzazione codice.
Nella riga sopra Public Class Form 1 scrivere il codice:

Import System.IO.File

All’interno di Private Sub Form1 scrivere o copiare il seguente codice:

My.Computer.FileSystem.CreateDirectory("C:\path")



2. Cercare e aprire una cartella
Creare un nuovo progetto con un Form e un Button
Cliccare due volte su Button e inserire le seguenti righe:

Dim openFileDialog1 As New OpenFileDialog()

If (openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
     System.IO.File.ReadAllText(openFileDialog1.FileName)

End if



9. Elencare le Subdirectory di una Cartella
Creare un progetto con un Form, una etichetta, un Button e un TextBox. Cliccate due volte sul Button e inserite il seguente codice:

Try
Dim dirPath As String = "c:\Windows"
Dim dirs As List(Of String) = New List(Of String)(Directory.EnumerateDirectories(dirPath))
Dim a(100) As String
Dim i As Integer

            i = 1
            For Each folder In dirs
                folder.Substring(folder.IndexOf("\") + 1)
            Next
            Label1.Text = "directories found." & dirs.Count

            For Each folder In dirs
                a(i) = folder.Substring(folder.LastIndexOf("\") + 1)
                TextBox1.Text = TextBox1.Text & a(i) & Chr(13) & Chr(10)
                i = i + 1
            Next


        Catch UAEx As UnauthorizedAccessException
            TextBox1.Text = (UAEx.Message)
        Catch PathEx As PathTooLongException
            TextBox1.Text = (PathEx.Message)
        End Try



3. Elencare i file di una cartella e leggerne il contenuto
Creare un nuovo progetto con Form, Button, ListBox e RichTextBox. Inserire Imports System.IO Prima di Public Class Form1.
Doppio clic su Button1 e inserimento delle seguenti linee:

Dim doc() As String
        doc = Directory.GetFiles("g:\VB")
        Dim path As String
        For Each path In doc
            ListBox1.Items.Add(path) ‘inserisce le righe di file nella ListBox1
        Next

Doppio clic su ListBox1. Selezionare l’evento Click. Nella Private Sub ListBox1_Click inserire le seguenti righe:

       ‘scrive il contenuto del file selezionato nel RichTextBox1
        read = File.OpenText(ListBox1.SelectedItem)
        While read.Peek <> -1
            RichTextBox1.Text = RichTextBox1.Text + read.ReadLine()
        End While



4. Creare un file .txt e salvarlo in una cartella
Creare un nuovo progetto con un Form. Cliccare sul Form1 per entrare in visualizzazione codice.
Nella riga sopra Public Class Form 1 scrivere il codice:

Import System.IO.File

All’interno di Private Sub Form1 scrivere o copiare il seguente codice:

 scrivi = IO.File.CreateText("C:\temp\HelpFile.txt")
 scrivi.WriteLine("File Help di prova" & Chr(13) & Chr(13) & "Testo del file....")
        scrivi.Close()


Viene creato il file HelpFile.txt. Il File viene salvato nella cartella C:\temp\



5. Creare un file Excel e salvarlo
Creiamo un file Excel chiamato “archiviodati” e lo salviamo con i dati di tre colonne in una directory chiamata “Cartella”
Creare un Form in un nuovo progetto. Aggiungere la libreria Excel : dal Menu Progetto => Aggiungi Riferimento =>Com  aggiungere il riferimento ad Excel. Creare un Modulo e inserire le seguenti righe:

    Public excel As Microsoft.Office.Interop.Excel.Application
    Public wb As Microsoft.Office.Interop.Excel.Workbook
    Public ws As Microsoft.Office.Interop.Excel.Worksheet
    Public Nome As String
    Public Eta As Integer
    Public Data As String

Aprire la pagina del codice di Form1_Load…. e inserire le seguenti righe:

  excel = New Microsoft.Office.Interop.Excel.Application
  If (My.Computer.FileSystem.FileExists("c:\Cartella\archiviodati.xlsx") = False) Then
  ‘se il file non esiste viene creato

  MsgBox("Non esiste un archivio dati. Viene pertanto creato un file Excel in     c:\Cartella\archiviodati.xlsx")
  excel = CreateObject("Excel.Application")
  wb = excel.Workbooks.Add
  ws = wb.Worksheets(1)

  ' Inserisce i titoli delle tre colonne
            ws.Range("A1").Value = "Nome"
            ws.Range("B1").Value = "Età"
            ws.Range("C1").Value = "Data"

wb.SaveAs("c:\Cartella\archiviodati.xlsx")
End If

  ‘Se il file esiste viene aperto e letto
  wb = excel.Workbooks.Open("c:\Cartella\archiviodati.xlsx")
  ws = excel.ActiveSheet
        Nome = ws.Cells(2, 1).Value 'Preleva il valore Nome
                 Eta = ws.Cells(2, 2).Value
        Data = ws.Cells(2, 3).Value

La creazione di un Modulo (e la dichiarazione di variabili Public) non é condizione necessaria ma è utile nel caso si voglia sviluppare il programma utilizzando più di un Form.
Per completare il programma e testarlo è necessario aggiungere degli inputBox che leggono i valori, scriverli nelle celle con wb.Range(“A2”).Value=Nome  etc… e salvare (Button) il file . Aggiungendo le Label i valori si possono visualizzare sul Form1.
Volendo memorizzare più dati (nel caso di programmi che richiedono la memorizzazione nella forma di un database) si dovrà ricorrere ad un array in lettura e scrittura (vedi prossimo listato).



6. Creare un file Excel in cui salvare i dati di un Array
Creare un nuovo progetto con un Form, un Button e un TextBox. Dal Menu Progetto => Aggiungi Riferimento =>Com  aggiungere il riferimento ad Excel.
Doppio clic su Button e inserimento delle seguenti righe di codice:

        Dim excel As Object
        Dim wb As Object
        Dim ws As Object
        Dim Nome(10) As String
        Dim Età(10) As Integer
        Dim Path As String
        Dim Prompt As String

        Prompt = "Inserire un percorso, completo di nomefile, in cui memorizzare i dati" & Chr(13) & Chr(10) & "(Esempio:  c:\Documenti\Prova.xlsx)"

        Path = InputBox(Prompt)

        'Crea un nuovo workbook in Excel
        Excel = CreateObject("Excel.Application")
        wb = excel.Workbooks.Add

        'Crea un array con 2 colonne e 10 righe
        Dim DataArray(0 To 9, 0 To 1) As Object
        Dim i As Integer
       
        'Aggiunge i titoli al worksheet nella riga 1
        ws = wb.Worksheets(1)
        ws.Range("A1").Value = "Nome"
        ws.Range("B1").Value = "Età"

        i = 1

        'Crea i dati
        Do Until i = 4
            Prompt = "inserisci nome"
            Nome(i) = InputBox(Prompt)
            Prompt = "Inserisci Età"
            Età(i) = InputBox(Prompt)
            DataArray(i - 1, 0) = Nome(i)
            DataArray(i - 1, 1) = Età(i)
            i = i + 1
        Loop


        'Trasferisce l'Array nel worksheet a partire dalla cella A2
        ws.Range("A2").Resize(10, 2).Value = DataArray

        'Salva il Workbook e esce da Excel
        wb.SaveAs(Path)
        excel.Quit()

        TextBox1.Text = "I dati sono stati salvati correttamente in " & Path

    End Sub

Nota: Aggiungere il controllo degli Input e degli errori



7. Cercare un file .txt e copiarne il testo in una RichTextBox
Creare un nuovo progetto con un Form, un Button e un RichTextBox
Cliccare due volte su Button e inserire le seguenti righe:

Dim openFileDialog1 As New OpenFileDialog()

If (openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
     RichTextBox1.Text = System.IO.File.ReadAllText(openFileDialog1.FileName)                                                
End If



8. Cercare un file .txt usando un filtro
Nota: Sviluppare questo programma in modo da impostare i filtri con un InputBox

Imports System.IO

Public Class Form1
  
    Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles _ Button1.Click
        Dim myStream As Stream = Nothing
        Dim openFileDialog1 As New OpenFileDialog()

        openFileDialog1.InitialDirectory = "c:\"
        openFileDialog1.Filter = "(*.txt)|*.txt|(*.*)|*.*|(*.rtf)|*.rtf"
        openFileDialog1.FilterIndex = 3
        openFileDialog1.RestoreDirectory = True

        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            Try
                myStream = openFileDialog1.OpenFile()
                If (myStream IsNot Nothing) Then
                    ' Insert code to read the stream here.
                End If
            Catch Ex As Exception
                MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
            Finally
       ' Check this again, since we need to make sure we didn't throw an exception on open.
                If (myStream IsNot Nothing) Then
                    myStream.Close()
                End If
            End Try
        End If
    End Sub
End Class



9. Caricare un file .rtf in un RichTextBox mantenendo la formattazione
Creare un progetto con un Form e un Button. Due clic sul Button e inserire la seguente riga:

RichTextBox2.LoadFile("G:\Analisi transazionale.rtf", RichTextBoxStreamType.RichText)



10. Caricare un file .rtf in un RichTextBox e selezionare una linea
Creare un nuovo progetto con un Form due Button e un RichTextBox. Cliccare sul Form1 per entrare in visualizzazione codice e inserire il seguente codice:

Private Sub SelectLine(ByVal lineNumber As Integer, ByVal richTextBox As RichTextBox)
        Dim begin As Integer = 0
     
        ' add the length of the lines
        For i As Integer = 0 To lineNumber - 1
            begin += richTextBox.Lines(i).Length
            ' aggiungo 1 a begin per Environment.NewLine
            begin += 1
        Next
        Dim length As Integer = richTextBox.Lines(lineNumber).Length
        richTextBox.[Select](begin, length)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.LoadFile("C:\temp\SelezionaLinea.rtf", RichTextBoxStreamType.RichText)
        Me.RichTextBox1.HideSelection = False
        SelectLine(1, Me.RichTextBox1) 'il conteggio inizia da 0; 1 corrisponde quindi alla linea 2

    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        RichTextBox1.LoadFile("C:\temp\SelezionaLinea.rtf", RichTextBoxStreamType.RichText)
        Me.RichTextBox1.HideSelection = False
        SelectLine(3, Me.RichTextBox1) 'corrisponde alla linea 4

    End Sub


Salvare un file di nome SelezionaLinea.rtf, con un testo di almeno 5 righe, nella cartella C:\temp\ (Caricando l’esempio si ottiene anche questo file)

Cliccando sul Button 1 si apre il file in RichTextBox e la linea 2 viene evidenziata. Cliccando Button2 si evidenzia la linea 4







































Nessun commento:

Posta un commento