Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    ListBox WnForms, diverso da ListBox WebForm Asp.NET?

    Come posso memorizzare come elemento di una listbox un elemento al suo interno composto da testo(che verra visualizzato) e valore, che costituisce il valore che memorizza l'elemento, proprio come ho sempre fatto con le listbox di asp.Net: quando infatti voglio aggiungere un elemento alla listbox, il metodo Add(object item), chiede solo un'oggetto(che verra visualizzato, ma non il valore, eppure esiste la proprità selected value, e quando si associa un origine dati, la procedura guidata chiede cosa memorizzare come valore e cosa visualizzare.
    Come posso risolvere??

    Grazie per l'attenzione!!

  2. #2
    purtroppo il metodo che dici tu funziona solo con un'associazione dati, per risolvere dovresti associargli una collection o cmq un array...
    I database... la mia passione + o -

  3. #3
    Ok, grazie era come temevo, speriamo che in versioni future implementeranno questa funzionalita che alcune volte puo risultare molto utile.


    Ciao

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    La funzionalità sembra esserci, almeno in .NET 2.0: si vedano le proprietà DisplayMember e ValueMember.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Si, ma come dice power.mobile, questo funziona solo associandogli un origine dati, e non creando gli elementi singolarmente.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da gigi90
    Si, ma come dice power.mobile, questo funziona solo associandogli un origine dati, e non creando gli elementi singolarmente.
    Non è del tutto vero. La proprietà Items consente di aggiungere "oggetti" alla ComboBox: nulla vieta, ad esempio, di definire una nuova classe che contenga tutte le informazioni che si vogliono associare ad un elemento (interi, booleani, ecc.) e ridefinire l'evento ToString tramite override per restituire la rappresentazione testuale dell'oggetto, del tutto personalizzata.

    A runtime, sarebbe sufficiente passare istanze degli oggetti da inserire al metodo Add della proprietà Items.

    Virtualmente, è possibile inserire qualsiasi tipo di oggetto nella ComboBox, e questo ne fa sostanzialmente un controllo più potente rispetto all'equivalente ASP.NET, al contrario di quanto si dice.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Cioè se creo un controllo che eredita dalla listbox e implemento il metodo toString()
    quello che restituisce toString() viene visualizzato come elemento ad esempio gli passo un oggetto listitem costituito da due campi
    e nel metodo toString() faccio restituire uno solo, quindi devo ereditare solo listItem()?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da gigi90
    Cioè se creo un controllo che eredita dalla listbox e implemento il metodo toString()
    quello che restituisce toString() viene visualizzato come elemento ad esempio gli passo un oggetto listitem costituito da due campi
    e nel metodo toString() faccio restituire uno solo, quindi devo ereditare solo listItem()?
    No, non devi ereditare nulla (se non da Object, ma è imprescindibile).

    Puoi creare una classe semplice in cui inserisci tanti campi (o proprietà, se preferisci) che mantengono le informazioni di ciascun elemento della ListBox; in seguito, crei oggetti appartenenti a questa classe, tanti quanti sono gli elementi con cui hai a che fare, e li inserisci direttamente nella ListBox usando il metodo ListBox.Items.Add().

    Il controllo ListBox è in grado di visualizzare la rappresentazione testuale degli oggetti attraverso il metodo ToString, ma c'è il problema che salvo dove tale metodo è ridefinito, il valore di default è il nome della classe, e questo non è senz'altro ciò che vuoi vedere tu all'interno del controllo ListBox, per ciascun elemento; allora torna alla tua classe personalizzata, ridefinisci con override il metodo ToString e dentro inserisci il codice che restituisce il testo da vedere, per ciascun elemento, nel controllo ListBox, ad esempio concatenando uno o più campi della classe stessa, o visualizzando uno di questi e così via.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Grazie, mi hai chiarito molte cose, tra le quali il perchè quando associavo oggetti ad altri controlli, vedevo la rappresentazione dell'oggetto in testo Es. "System.Data.Row" ecc.,


    Di nuovo, Ciao

  10. #10
    Ecco come ho risolto:

    Codice PHP:
    public partial class Form1 Form {
            public 
    Form1() {
                
    InitializeComponent();
            }

            private class 
    Elemento {

                public 
    Elemento(string Nome,string ID){
                    
    this.Nome Nome;
                    
    this.ID ID;
                }
                private 
    string nome;
                public 
    string Nome {
                    
    get {
                        return 
    nome;
                    }
                    
    set {
                        
    nome value;
                    }
                }
                private 
    string id;
                public 
    string ID {
                    
    get {
                        return 
    id;
                    }
                    
    set {
                        
    id value;                    
                    }

                }

                public 
    override string ToString() {
                    return 
    Nome;
                }

                
            }

            private 
    void Form1_Load(object senderEventArgs e) {
                
    Elemento ele1 = new Elemento("Gianluigi""1");
                
    Elemento ele2 = new Elemento("Mario""2");
                
    Elemento ele3 = new Elemento("Matteo""3");
                
    listBox1.Items.Add(ele1);
                
    listBox1.Items.Add(ele2);
                
    listBox1.Items.Add(ele3);
            }

            private 
    void listBox1_SelectedIndexChanged(object senderEventArgs e) {
                
    //Mi stampa l'id anche se non è visualizzato nella listbox, poiche non contenuto nella stringa restituita
                //da ToString.
                
    MessageBox.Show(((Elemento)listBox1.SelectedItem).ID);
            }
        } 

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.