Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Vb2008] Modificare visualizzazione dei grafi nel debug

    Quando, in debug e in un breakpoint, visualizzo il grafo di un oggetto, il menù contestuale riporta tutte le sue variabili e le sue proprietà, quindi posso facilmente identificarlo (come mostrato nell'immagine in questa pagina). Quando ho una lista o una collezione di oggetti, se visualizzo il grafo della lista, vedo che tutti gli oggetti hanno come testo il nome del loro tipo (es.: App_Prove_Console.Module1.Person, nel caso sopra citato) e per cogliere le differenza tra ciascun oggetto devo ispezionare le sue proprietà aprendo un'ulteriore sotto-lista. Tuttavia, ho notato che alcuni tipi non seguono questo comportamento: ad esempio, oggetti ti dipo Drawing.Point vengono visualizzati con una stringa del tipo "X: 12; Y: 12". Vorrei sapere come fare per modificare la visualizzazione di oggetti nel debug (dichiarare un metodo ToString() non funziona).

  2. #2
    Credo che sia una questione di TypeConverter.
    ---EDIT---
    No, ho fatto qualche esperimento e mi pare che non c'entri.
    ---EDIT2---
    Trovato. In passato da quanto ne so veniva chiamato ToString, ma evidentemente l'hanno cambiato in VS2008 per evitare gli eventuali side-effects degli override di ToString. Puoi comunque utilizzare lo stesso valore restituito da ToString applicando l'attributo in questione come ho fatto qui:
    codice:
    Module Module1
        <DebuggerDisplay("{ToString()}")> _
        Class Test2
            Public a As String
            Public b As Integer
            Public c As Double
            Public Overrides Function ToString() As String
                Return String.Format("{{{0};{1};{2}}}", a, b, c)
            End Function
        End Class
    
        <DebuggerDisplay("{ToString()}")> _
        Class Test
            Public punto As System.Drawing.Point
            Public test As Test2
            Public Overrides Function ToString() As String
                Return String.Format("{{{0};{1}}}", punto, test)
            End Function
        End Class
    
        Sub Main()
            Dim prova As New Test
            prova.punto.X = 10
            prova.punto.Y = 53
            prova.test = New Test2()
            prova.test.a = "ciao"
            prova.test.b = 6
            prova.test.c = 2.74
            Console.WriteLine(prova)
        End Sub
    
    End Module
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Finalmente una buona soluzione! Grazie mille.

  4. #4
    Di niente; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.