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

    [C#] Array di Controlli

    Scusate, mi chiedevo, in C# è possibile creare un Array di controlli?

    In VB6 era facilissimo farlo, basta copiare ed incollare un qualsiasi controllo, tipo un Button o Textbox, ed incollandolo chiedeva se toccava incollarlo come nuovo controllo o creando un'indicizzazione.

    In C# (devo usare il 2003) non so se sia possibile (anche se credo lo sia, non penso che da VB6 a .Net ci sia stato un passo indietro), solo che non so come attivare questa cosa.

    Sapete come si fa?

    Grazie

  2. #2
    Uff, cercando e raffazzonando qualcosa l'ho ottenuto, certo che tocca stare attenti, altrimenti Visual Studio s'attapira

    Vi scrivo come ho risolto:

    Questo l'ho messo sotto la dichiarazione dei controlli, subito dopo l'apertura della classe Form:
    codice:
    private System.Windows.Forms.Label[] lblBottoniLST;
    L'inizializzazione di questi controlli array non va messa dentro InitializeComponent(), altrimenti il compilatore s'avvelena.

    Ovviamente l'ho messo dentro l'evento Form_load:
    codice:
    this.lblBottoniLST = new Label[1];
    for(int i=0;i<lblBottoniLST.Length;i++)
    {
        this.lblBottoniLST[i]=new System.Windows.Forms.Label();
        this.lblBottoniLST[i].Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
        if(i==0)
            this.lblBottoniLST[i].Image = picBottone_hidden.Image;
        else
            this.lblBottoniLST[i].Image = picSfondoBottone_hidden.Image;
        if(i==0)
            this.lblBottoniLST[i].Location = new System.Drawing.Point(0, 2);
        else
            this.lblBottoniLST[i].Location = new System.Drawing.Point(this.lblBottoniLST[i-1].Location.X+92, 2);
        this.lblBottoniLST[i].Name = "lblBottoniLST"+i.ToString();
        this.lblBottoniLST[i].Size = new System.Drawing.Size(92, 21);
        this.lblBottoniLST[i].TabIndex = 2;
        this.lblBottoniLST[i].Text = "Bottone "+i.ToString();
        this.lblBottoniLST[i].TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
        this.lblBottoniLST[i].Click += new System.EventHandler(this.lblBottoniLST_Click);
        this.Controls.Add(this.lblBottoniLST[i]);
        lblBottoniLST[i].BringToFront();
    }
    lblBottoniLST[0].Text="Report";
    La label in questione viene utilizzata come bottone, ha quindi due sfondi, quello attivo e quello disattivato.

    Nel mio caso per il momento ho messo una sola label, ma se ne possono inserire quante se ne vuole aumentanto il numero nel new Label[], basta poi gestire la text per il testo visualizzato.

    L'evento lblBottoniLST_Click va inserito a mano, ora vi scrivo come ho gestito l'evento che se clicco su un pulsante quello mi diventa attivo e gli altri disattivati:
    codice:
    private void lblBottoniLST_Click(object sender, System.EventArgs e)
    {
        Label tmp=(Label)sender;
        for(int i=0;i<lblBottoniLST.Length;i++)
        {
            if(tmp.Name.Equals(lblBottoniLST[i].Name))
            {
                lblBottoniLST[i].Image=picBottone_hidden.Image;
            }
            else
            {
                lblBottoniLST[i].Image=picSfondoBottone_hidden.Image;
            }
        }
    }
    Sender è l'oggetto Label che ho cliccato, lo casto per farlo diventare Label e confronto il Name di sender con tutti i Name dei lblBottoniLST.

    Come vedete la gestione degli eventi è molto meno penosa di quento mi potevo immaginare

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    solo per dare (eventualmente, qualora fosse necessario) un'idea..
    nemmeno potrei parlare perchè ammetto di nn aver letto il tuo codice, se non di volata...
    Però io ad esempio sono solito inserire i controlli in ArrayList ad esempio... a primo impatto mi pare molto più semplice rispetto alla gestione da te proposta....
    quindi se poi devo settare una proprietà a uno o tutti i controlli contenuti, scorro l'arraylist è il gioco è fatto, al limite effettuando il cast dell'object generico ke contiene l'arraylist cn CTYPE....
    So di esser stato poco chiaro magari, era solo per offrire qualche spunto. Se ti interessasse la cose ne possiamo riparlare caso mai.
    ciao

  4. #4
    Io piuttosto userei una List fortemente tipizzata

    codice:
    Dim controls As New List(Of Control)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    questa mi manca :-P
    nel senso che non so di cosa parli... ho sentito dire il termine ma non so bene cosa sia e come funzioni la cosa...
    indagherò...
    perchè personalm sn molto interessato alla cosa... ho un programma di dimensioni abbast consistenti che utilizza molto la gestione dinamica di controlli... quindi ti lascio immaginare come mi diverte l'argomento :-)
    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    provato... :-)
    grande!
    semplifica ancor più la gestione che faccio io dei controlli... non c'è bisogno di fare il cast ogni volta... non so se ci sono altri vantaggi anche perchè ho provato il tutto in meno di 5 minuti basandomi solo sulle tue indicazioni e lasciando il resto delle mie "scoperte" all'aiuto dell'IDE... mi sorge una domanda però... ho utilizzato SharpDevelop 2.2, qndi .NET framework 2.0 e VB2005... questa caratteristica esiste anche nella precedente versione di VB.NET? (io lavoro col 2003)

  7. #7
    Non ti resta che controllare su MSDN.

    P.S. Anche se ti consiglierei di fare un upgrade dalla 2003 alla 2005.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    134
    beh forse ormai l'upgrade dovrei farlo direttamente alla 2008, nn credi?
    Cmq il fatto è che io con VB.NET ci lavoro, ci realizzo programmi per venderli, e ho acquistato qualche anno fa Visual Basic .NET 2003 standard edition per 130 euro circa... ho regolare licenza, ho il tool che consente di creare i progetti di Setup per gli installatori, ecc ecc... Mi pare che con la 2005 non ci siano pacchetti di Visual Studio limitati a un solo linguaggio che costino cifre simili, e che bisogna sborsare minimo 500 euro. Ora, per i vantaggi a cui andrei incontro, non so fino a che punto ne vale la pena, nell'ottica che, appunto, siamo alla 2008. Ma, a prescindere, per quel che faccio basta la 2003... certo c'è il controllo WebBrowser che mi manca, questo è vero :-P
    Ultimamente sto utilizzando SharpDevelop 2.2 come dicevo prima... è molto migliorato rispetto al primo SharpDevelop sotto diversi aspetti. Non sono riuscito però a creare progetti di installazione (e questa è per me una cosa importante).
    Cmq tornando all'argomento, andrò a vedere su MSDN se per il .NET 1.1 si parla di liste tipizzate.

  9. #9
    [OT] Per come la vedo io la 2008 non è ancora matura come mercato intendo.
    E per gli Installer, io per adesso utilizzo NSIS, prima stavo facendo un Installer mio ma poi a sviluppare il sistema di roll-back e per il fatto che era .NET l'eseguibile che creava ho preferito abbandonare per adesso (magari ci riproverò in futuro in Delphi o magari C/C++).

    E cmq mi sa che non c'è nella 1.1 solo a partire dalla 2.0, però forse mi sbaglio e ho cercato male su MSDN, però prova lo stesso chissà magari và.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    143

    [C#] index di array di controlli

    [C#] Salve a tutti, volevo sapere come si fa ad ottenere l'index di un array di label
    nell' evento click cioè cliccando su una label.

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.