Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314

    [VB.NET] Visualizzare/modificare proprietà di una classe

    In un mio programma personale stò "migrando" da my.setting e file xml vari in favore di alcune classi che serializzo e deserializzo, fin qui tutto OK.
    Il problema su cui mi sono impantanato è sulla classica Form Impostazioni nel senso che vorrei evitare di fare tutto ad hoc per ogni singola impostazione anche perchè aggiungendo impostazioni dovrei modificare Form e codice.
    Ho provato ad usare la PropertyGrid ma non è adatta perchè ho proprietà di tipo String che contengono del testo tipo:
    codice:
    ^XA
    ^LH0,0
    ^A0N,20,25^FO220,20^CI0^FD9data9^FS
    ^A0N,20,25^FO5,20^CI0^FD9documento9^FS
    ^A0N,40,45^FO5,50^CI0^FD9codice9^FS
    ^PQ9etichette9
    ^XZ
    e la visualizzazione sulla PropertyGrid non è adatta come non mi piace per le proprietà di tipo arraylist o dictionary che contengono un "nome" e stringhe come sopra.
    Consigli?

  2. #2
    Ma queste stringhe che cosa sono? Campi separati da caratteri "magici"?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da MItaly
    Ma queste stringhe che cosa sono? Campi separati da caratteri "magici"?
    Non capisco la domanda...
    Comunque è codice ZPL (Zebra Programming Language), serve a stampare etichette su stampanti termiche Zebra o compatibili, la stringa di testo contiene le informazioni per creare l' etichetta: posizioni, testo, carattere, eccetera.
    In pratica basta scrivere il codice su un file txt e stamparlo sulla Zebra installata come Generic/Text Only. Per fare questo uso una stringa del genere:
    codice:
        Public entrate As String = "^XA" & vbCrLf & _
           "^LH0,0" & vbCrLf & _
           "^FO240,0^A0N,17,17^FD9data9^FS" & vbCrLf & _
           "^FO5,0^A0N,17,17^FH\^FD9documento9^FS" & vbCrLf & _
           "^FO5,22^A0N,40,45^FH\^FD9codice9^FS" & vbCrLf & _
           "9barcode_testo9" & vbCrLf & _
           "^PQ9etichette9" & vbCrLf & _
           "^XZ"
    sostituisco le keyword 9abc9 con i dati che mi servono e stampo con printdocument.
    Ogni riga è un "comando", ad esempio "^LH" indica Label Home cioè la posizione XY relativa sull' etichetta di tutti gli altri elementi stampati.
    La propertygrid mostra tutto su una riga ed è un problema modificare qualcosa...inoltre pensavo di visualizzare il codice ZPL usando un syntax highlighter.

  4. #4
    se il problema è che ti sta tutto su una riga usa una textbox multiriga

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Il problema è che non voglio richiamare ogni proprietà per ogni classe a "mano" ma data una classe ottenere/modificare le proprietà/valori come fa la PropertyGrid...che non è il massimo nel mio caso.
    Stò facendo qualche prova con le Reflection che sembra funzionare a dovere...ma devo creare dei controlli personalizzati da visualizzare a secondo del tipo della proprietà...un bel sbattimento...

    codice:
    Imports System.Reflection
    
    Public Class Form1
        Dim test_a_copia As New clstest_a
        Dim test_b_copia As New clstest_b
        Dim elenco As New Dictionary(Of String, Object)
        Dim t As Type
        Dim Pinfo As PropertyInfo
    
        Private Sub Form1_Load() Handles MyBase.Load
            elenco.Add("test_a", test_a_copia)
            elenco.Add("test_b", test_b_copia)
            ListBox_classe.Items.AddRange(elenco.Keys.ToArray)
        End Sub
    
        Private Sub ListBox_classe_SelectedIndexChanged() Handles ListBox_classe.SelectedIndexChanged
    
            ListBox_proprietà.Items.Clear()
            TextBox_valore.Text = ""
            t = (elenco(ListBox_classe.SelectedItem.ToString).GetType)
    
            For Each PrI As PropertyInfo In t.GetProperties
                ListBox_proprietà.Items.Add(PrI.Name)
            Next
    
        End Sub
    
        Private Sub ListBox_proprietà_SelectedIndexChanged() Handles ListBox_proprietà.SelectedIndexChanged
            Pinfo = t.GetProperty(ListBox_proprietà.SelectedItem.ToString)
            TextBox_valore.Text = Pinfo.GetValue(elenco(ListBox_classe.SelectedItem.ToString), Nothing).ToString
        End Sub
    
        Private Sub TextBox_valore_LostFocus() Handles TextBox_valore.LostFocus
            Pinfo.SetValue((elenco(ListBox_classe.SelectedItem.ToString)), TextBox_valore.Text, Nothing)
        End Sub
    
    End Class
    
    Public Module impostazioni
    
        Public test_a As New clstest_a
        Public test_b As New clstest_b
    
    End Module
    
    Public Class clstest_a
    
        Public Property a As String = "aaa"
        Public Property b As String = "asdxx"
        Public Property c As String = "asdccss"
    
    End Class
    
    Public Class clstest_b
    
        Public Property aaa As String = "cccccccc"
        Public Property bbb As String = "vv"
        Public Property ccc As String = "bbbb"
    
    End Class

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 © 2026 vBulletin Solutions, Inc. All rights reserved.