Archivi giornalieri: 18 gennaio 2008
[VS] Debug delle classi del Framework .NET
A quanto pare è arrivato il momento di poter dare uno sguardo al Framework .NET!
Infatti, Microsoft ha reso possibile eseguire il debug delle classi contenute nel Framework .NET, naturalmente in sola lettura. Per vedere come è possibile applicare questa possibilità a Visual Studio 2008, vi consiglio questa pagina (in inglese): http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx.
Possono essere visionate le seguenti librerie:
- .NET Base Class Libraries (inclusi System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc).
- ASP.NET (System.Web, System.Web.Extensions)
- Windows Forms (System.Windows.Forms)
- Windows Presentation Foundation (System.Windows)
- ADO.NET e XML (System.Data e System.Xml)
Attenzione: non è possibile usufruire di questa opportunità con la versione Express.
#7 Nascondere/ripristinare il puntatore del mouse
Talvolta alcune applicazioni richiedono che non sia visibile il puntatore del mouse (Cursor).
Con VB.NET è possibile farlo in modo estremamente semplice.
Per farlo scomparire:
System.Windows.Forms.Cursor.Hide()
e per farlo riapparire
System.Windows.Forms.Cursor.Show()
Attenzione però che l’eventuale crash dell’applicazione potrebbe lasciare il cursore del mouse nello stato “invisibile” fino al riavvio del sistema!
#6 Sabato o domenica?
A volte, specialmente in programmi gestionali, e’ utile sapere se una determinata data cade di sabato o domenica. Ecco una routine che svolge questo lavoro.
Public Function IsWeekend(ByVal data As Date, _
ByRef giorno As String) As Boolean
' Parametri di input:
' - data: la data da testare
' - giorno: parametro passato per riferimento
' Il parametro 'giorno', passato per riferimento, viene
' modificato per restituire il nome del giorno della settimana,
' se sabato o domenica, oppure l'indicazione "feriale".
'
' Parametri di output:
' - True: il giorno testato è un sabato o una domenica
' - False negli altri casi
Select Case Weekday(data)
Case FirstDayOfWeek.Saturday
giorno = "Sabato"
IsWeekend = True
Case FirstDayOfWeek.Sunday
giorno = "Domenica"
IsWeekend = True
Case Else
giorno = "feriale"
IsWeekend = False
End Select
End Function
La funzione di cui sopra viene testata con il seguente codice (da inserire nell’evento Load della Form, oppure nell’evento Click di un pulsante):
Dim giorno As String
Dim i As Integer
For i = 0 To 1
' test su 2 giorni consecutivi (domenica e lunedi)
If IsWeekend(DateAdd("d", i, #1/20/2008#), giorno) Then
MsgBox("Non si lavora di " & giorno)
Else
MsgBox("Giorno " & giorno & ": OK, lavora lavora!!")
End If
Next i
#5 Verifica se anno bisestile
Spesso è necessario conoscere se un anno sia bisestile. Nel tempo si sono trovate molte soluzioni diverse a questo problema.
Con VB.NET il problema è stato risolto alla fonte: è fornito un opportuno metodo, IsLeapYear, che accetta in input un valore intero (l’anno) e restituisce un valore booleano (True = bisestile, False = non bisestile).
Per provare questa funzione, creare una form, aggiungere due TextBox di nome rispettivamente TextBox1 e TextBox2 ed un pulsante e infine, nell’evento Click del pulsante inserire il seguente codice:
If TextBox1.Text = "" Then
TextBox2.Text = "anno non indicato"
Else
If (DateTime.IsLeapYear(Integer.Parse(TextBox1.Text)) = True) _
Then
TextBox2.Text = "L'anno " & TextBox1.Text & " è bisestile."
Else
TextBox2.Text = "L'anno " & TextBox1.Text & " NON è bisestile."
End If
End If
#4 Ottenere l’indirizzo IP
Per ottenere l’indirizzo IP della macchina (collegata in rete) sulla quale gira il programma, ecco una soluzione valida per Visual Basic 2005:
Private Shared Sub NamedSub() Dim loip() As System.Net.IPAddress = _ System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName) Dim ip As String = loip(0).ToString MessageBox.Show(ip) End Sub
E’ possibile ottenere altre informazioni sulla connessione di rete leggendo questo articolo pubblicato su MSDN
Il metodo usato in Visual Basic 2003 è obsoleto e da evitare:
Dim ip As String = _ System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName) .AddressList(0).ToString
N.B.: l’istruzione deve essere scritta tutta su una singola riga
#3 Verificare che un form sia aperto
Per verificare che un form sia aperto si può utilizzare il codice sotto riportato.
Aspetti fondamentali di questa tecnica sono:
- l’importazione del namespace System.Windows.Forms
- il ciclo di test sul nome del form realizzato con For Each,
testando la collezione Application.OpenForms.
Imports System.Windows.Forms Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim nomeForm As String = "Form1" If VerificaFormAperto(nomeForm) = True Then MessageBox.Show(nomeForm & " è aperto!") Else MessageBox.Show(nomeForm & " NON è aperto") End If End Sub Public Function VerificaFormAperto(ByVal nomeForm As String) _ As Boolean Dim f As Form For Each f In Application.OpenForms If f.Name = nomeForm Then Return True End If Next Return False End Function End Class