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  
Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 844 follower