Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-11-2009, 17:53   #1
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
[VB.NET] Lettura da file INI a varie textbox

Ciao a tutti,
Vi pongo una domandina...
Ho costruito un form dove sono presenti parecchie textbox che dovrebbero contenere dei valori letti da un file .ini ad esempio:

Server Name=Daniele -> textbox1.text = Daniele
Admin Name=Carlo -> textbox2.text = Carlo
.. e così via ..

Dovrei poter anche salvare il file in funzione delle modifiche apportate dal mio form... Come potrei imbastire il codice? è fattibile la cosa?
Grazie mille a tutti
__________________
D@x
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 18:04   #2
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Certamente, l'idea base è di aprire il file in lettura, leggerlo riga per riga e lanciare l'update delle textbox con istruzioni tipo

TextboxN.text = <stringa letta dal file>

Suppongo VB.NET abbia anche qualcosa di più evoluto per leggere un file INI senza doverlo scorrere riga per riga e fare il parsing della riga letta per ricavare la stringa cercata
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 18:25   #3
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
Benissimo, grazie!

hai suggerimenti? sappi che io sono novizio in materia

Ho letto di streamreader, riesco a fargli leggere interamente un file testuale e riempire una textbox ma... per fargli discriminare le parole ancora non ce la fò..
__________________
D@x
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 18:55   #4
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
ciao,

intendi proprio un INI esterno oppure vuoi fare un file risorsa o config ecc..?

immagino la prima, prova a postare la struttura di questo file, perchè credo che si debba fare a manina la lettura.
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 19:54   #5
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
Quello che posto è solo una porzione di "INI", non mi servono proprio tutti i paramteri contenuti ma solo alcuni...

ServerBehindNAT=false
DoLANBroadcast=False
bIgnoreUTANBans=True
ServerName=++ Enjoy II ++ The [BuG] Server
AdminName=ARIX
UsePrecaching=True
ecc..

hai idee? grazie per l'interessamento..
__________________
D@x
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 20:58   #6
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da daxdaxdax Guarda i messaggi
Quello che posto è solo una porzione di "INI", non mi servono proprio tutti i paramteri contenuti ma solo alcuni...

ServerBehindNAT=false
DoLANBroadcast=False
bIgnoreUTANBans=True
ServerName=++ Enjoy II ++ The [BuG] Server
AdminName=ARIX
UsePrecaching=True
ecc..

hai idee? grazie per l'interessamento..
se le righe sono sempre "uguali" nel senso che sono sempre <key>=<valore>
basta che le leggi riga per riga e splitti al segno uguale.

esempio :

Codice:
Dim strLinee As String() = File.ReadAllLines("percorso")
Dim ValoreFileINI As String 
Dim key As String ="AdminName"
                For Each strLinea As String In strLinee
                    If strLinea.IndexOf("=") > -1 Then
                        If key = strLinea.Split("=")(0) Then
                           ValoreFileINI = strLinea.Split("=")(1)
                         End If
                     End If
                Next

non ho modo di testare, ma dovrebbe essere corretto (io programmo in c#)
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 21:18   #7
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
Sei un grande,funziona, bravo!
per aggiungere altre parole devo aggiungere altri "dim"?
ora provo...
poi per poter fare l inverso sarà difficile? cioè modificare da textbox e salvare nel posto giusto nell ini...
__________________
D@x
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 21:28   #8
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
Ok sono riuscito.. spettacolo!!

è sorta una problematica:
nell ini sono a volte presenti piu valori con lo stesso nome, differenziati solo dal loro titolo, es:

[XGame.xDeathMatch]
MaxLives=0
TimeLimit=20
GoalScore=50
....

[XGame.xTeamGame]
MaxLives=0
TimeLimit=20
GoalScore=60
bTeamScoreRound=False
....

come posso discriminare i valori dal loro titolo? è possibile?
__________________
D@x

Ultima modifica di daxdaxdax : 02-11-2009 alle 23:05.
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 23:11   #9
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da daxdaxdax Guarda i messaggi
Ok sono riuscito.. spettacolo!!

è sorta una problematica:
nell ini sono a volte presenti piu valori con lo stesso nome, differenziati solo dal loro titolo, es:

[XGame.xDeathMatch]
MaxLives=0
TimeLimit=20
GoalScore=50
....

[XGame.xTeamGame]
MaxLives=0
TimeLimit=20
GoalScore=60
bTeamScoreRound=False
....

come posso discriminare i valori dal loro titolo? è possibile?
ha delle righe vuote tra i blocchi con le parentesi quadre?
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2009, 23:32   #10
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
si, tra un blocco e l'altro cè una sola riga vuota.

Povero U235, a giudicare dal numero dei tuoi messaggi, deduco che ti sei appena iscritto... e io ti ho accolto con un bello sbattone ... perdonami :-)
__________________
D@x
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 08:28   #11
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
ciao, ho buttato giu' un codice adatto a leggere scrivere con semplicità sull' INI, il problema e che l'ho scritta in c# perchè non ho modo di testare con vb.

comunque la posto cosi se tu o qualcuno la puo'/vuole tradurre in vb prima di me (probabilmente staro fuori oggi) lo puo' fare.

concettualmente comunque ho creato una lista di "blocchi" (cioè quelli tra parentesi quadre) che contengono i campi (cioè tutti quelli tipo <key>=<value>) che a loro volta hanno le proprietà nome e valore.
editando queste proprietà e possibile editare anche il file facendo il ciclo della liste di blocchi e chiaramente per ogni blocco faccio il ciclo sui campi contenuti contenuti dentro

appena posso faccio la conversione.
Codice:
public class EditINI
    {
        public List<BloccoINI> blocchi { get; set; }
        public string PercorsoFile { get; private set; }
        
        public EditINI(string percorsoFile)
        {
            this.PercorsoFile = percorsoFile;
            this.blocchi = new List<BloccoINI>();
            System.IO.StreamReader sr = null;
            try
            {
                //creo un StreamReader per leggere il file
                sr = new System.IO.StreamReader(this.PercorsoFile);
                //leggo il file e lo divido in linee
                string[] linee = sr.ReadToEnd().Split('\n');
                sr.Close();
                sr.Dispose();
                sr = null;
                int c = 0;
                //itero tutte le linee alla ricerca dei "blocchi"
                foreach (string linea in linee)
                {                    
                    if(linea.Length>1)
                    {
                        string Slinea = linea.Remove(linea.Length - 1);
                        // se trovo l'inizio di un blocco dentro il file...
                        if (Slinea != string.Empty && linea.Substring(0, 1) == "[")
                        {
                            //creo un nuovo blocco
                            BloccoINI blocco = new BloccoINI();
                            //lo nomino con tutta la sua riga
                            blocco.Nome = Slinea;
                            // creo una nuova lista di campi
                            blocco.Campi = new List<CampoINI>();
                            //imposto il numero di linea
                            blocco.NumeroLinea = c;
                            //aggiungo il blocco alla lista
                            this.blocchi.Add(blocco);
                        }
                        //diversamente è un campo
                        else
                        {
                            //divido la chiave dal valore
                            string[] valoriCampo = Slinea.Split('=');
                            //creo un nuovo campo
                            CampoINI campo = new CampoINI();
                            //imposto la "key"
                            campo.Nome = valoriCampo[0];
                            //imposto il valore
                            campo.Valore = valoriCampo[1];
                            //imposto il numero di linea
                            campo.NumeroLinea = c;
                            //aggiungo il campo all'ultimo blocco creato
                            this.blocchi[this.blocchi.Count - 1].Campi.Add(campo);
                        }
                    }
                    c++;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                if(sr != null)
                {
                    sr.Close();
                    sr.Dispose();
                }
            }
        }

        public int IndiceBlocco(string blocco)
        {
            int result = -1;
            int c=0;
            try
            {
                foreach(BloccoINI bloccoINI in this.blocchi)
                {
                    if (blocco.ToUpper() == bloccoINI.Nome.ToUpper())
                    {
                        return c;
                    }
                    c++;
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            return result;
        }

        public int IndiceCampo(string blocco, string campo)
        {
            int result = -1;
            int c =0;
            try
            {
                foreach(CampoINI campoINI in this.blocchi[IndiceBlocco(blocco)].Campi)
                {
                    if (campo.ToUpper() == campoINI.Nome.ToUpper())
                    {
                        return c;
                    }
                    c++;
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            return result;
        }

        public bool ScriviFileINI()
        {
            bool result = true;
            System.IO.StreamWriter sw = null;
            try
            {
                sw = new System.IO.StreamWriter(this.PercorsoFile);
                //itero tutti i blocchi
                foreach (BloccoINI blocco in this.blocchi)
                {
                    //incomincio scrivendo sul file il nome del blocco [xx--nome]
                    sw.WriteLine(blocco.Nome);
                    //itero tutti i campi contenuti in questo blocco
                    foreach (CampoINI campo in blocco.Campi)
                    {
                        StringBuilder sb = new StringBuilder(campo.Nome);
                        sb.Append("=");
                        sb.Append(campo.Valore);
                        //scrivo la <key>=<value> eventualmente modificata
                        sw.WriteLine(sb.ToString());
                    }
                    //alla fine del blocco rimetto la riga vuota
                    sw.WriteLine('\n');
                }
                sw.Close();
                sw.Dispose();
                sw = null;                
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                result = false;
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                    sw.Dispose();
                }
            }
            return result;
        }

        public class CampoINI
        {
            public string Nome { get; set; }
            public string Valore { get; set; }
            public int NumeroLinea { get; set; }
        }

        public class BloccoINI
        {
            public string Nome { get; set; }
            public List<CampoINI> Campi { get; set; }
            public int NumeroLinea { get; set; }
        }

        public CampoINI this[string blocco,string campo]
        {
            get { return this.blocchi[this.IndiceBlocco(blocco)].Campi[this.IndiceCampo(blocco, campo)]; }
            set { this.blocchi[this.IndiceBlocco(blocco)].Campi[this.IndiceCampo(blocco, campo)] = value; }
        }
    }

    
}
e per utilizzaarla :
Codice:
EditINI edit = new EditINI(@"C:\ini.ini");

edit["[XGame.xDeathMatch]", "MaxLives"].Valore = "45";
edit["[XGame.xTeamGame]", "MaxLives"].Valore = "30";
edit["[XGame.xTeamGame]", "GoalScore"].Valore = "15";
edit["[XGame.xDeathMatch]", "GoalScore"].Valore = edit["[XGame.xTeamGame]", "GoalScore"].Valore ;
//oppure :
edit.blocchi[1].Campi[2].Valore = "5";


//cancellare campi
edit.blocchi[0].Campi.RemoveAt(1);
 //rimuovere blocchi interi
 edit.blocchi.RemoveAt(edit.IndiceBlocco("[XGame.xDeathMatch]"));
 
//aggiungere blocchi e campi
 EditINI.BloccoINI blocco = new EditINI.BloccoINI();
            blocco.Nome = "[quellochetipare]";
            EditINI.CampoINI campo = new EditINI.CampoINI();
            campo.Nome = "nomechemipare";
            campo.Valore = "valore";
            blocco.Campi = new List<EditINI.CampoINI>();
            blocco.Campi.Add(campo);
            edit.blocchi.Add(blocco);

//aggiungere campi a blocchi esistenti

edit.blocchi[0].Campi.Add(campo);
//infine scrivo sul file
edit.ScriviFileINI();

Ultima modifica di U235 : 03-11-2009 alle 08:53. Motivo: integrazione codice
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 13:29   #12
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da daxdaxdax Guarda i messaggi
è sorta una problematica:
nell ini sono a volte presenti piu valori con lo stesso nome, differenziati solo dal loro titolo, es:

[XGame.xDeathMatch]
MaxLives=0
TimeLimit=20
GoalScore=50
....

[XGame.xTeamGame]
MaxLives=0
TimeLimit=20
GoalScore=60
bTeamScoreRound=False
....

come posso discriminare i valori dal loro titolo? è possibile?
Puoi vedere un File INI come una collezione di Gruppi, un Gruppo come una collezione di Chiavi ( coppie di nomeChiave e valoreChiave ), in questo modo rendi tutto più organico e leggibile.

Personalmente risolverei con alcune semplici Classi :

> Classe Chiave :
Codice:
Public Class Chiave

    Private m_nome As String
    Private m_valore As String

    Public Property Nome() As String
        Get
            Return m_nome
        End Get
        Set(ByVal value As String)
            m_nome = value
        End Set
    End Property

    Public Property Valore() As String
        Get
            Return m_valore
        End Get
        Set(ByVal value As String)
            m_valore = value
        End Set
    End Property

    Public Sub New(ByVal nomeChiave As String, ByVal valoreChiave As String)

        m_nome = nomeChiave
        m_valore = valoreChiave

    End Sub

End Class
> Classe Gruppo :
Codice:
Public Class Gruppo
    Inherits List(Of Chiave)

    'Rappresenta un gruppo coerente di coppie "chiave=valore"

    Private m_nome As String

    Public Sub New(ByVal nome As String)
        m_nome = nome
    End Sub

    Public Property Nome() As String
        Get
            Return m_nome
        End Get
        Set(ByVal value As String)
            m_nome = value
        End Set
    End Property

    Public Function GetChiaveByNome(ByVal nomeChiave As String) As Chiave

        For Each C As Chiave In Me
            If C.Nome = nomeChiave Then
                Return C
            End If
        Next
        Return Nothing

    End Function

End Class
> Classe FileIni :
Codice:
Public Class FileIni
    Inherits List(Of Gruppo)

    Private m_nomeFileCompleto As String

    Public Sub New(ByVal nomeFileCompleto As String)
        m_nomeFileCompleto = nomeFileCompleto
    End Sub

    Public Sub Carica()

        Me.Clear()
        Using TR As System.IO.TextReader = System.IO.File.OpenText(m_nomeFileCompleto)
            Dim strLinea As String = ""
            Dim n As String = ""
            Dim v As String = ""
            Dim nv As String()
            Dim G As Gruppo = Nothing
            Do Until strLinea Is Nothing
                strLinea = TR.ReadLine()
                If strLinea = "" Then Continue Do
                If strLinea(0) = "[" And strLinea(strLinea.Length - 1) = "]" Then
                    G = New Gruppo(strLinea)
                    Me.Add(G)
                Else
                    nv = strLinea.Split("=")
                    n = nv(0)
                    v = nv(1)
                    G.Add(New Chiave(n, v))
                End If
            Loop
            TR.Close()
        End Using

    End Sub

    Public Sub Salva()

        If Me.Count = 0 Then Exit Sub
        Using TW As System.IO.TextWriter = System.IO.File.CreateText(m_nomeFileCompleto)
            For Each G As Gruppo In Me
                TW.WriteLine(G.Nome)
                For Each C As Chiave In G
                    TW.WriteLine(C.Nome & "=" & C.Valore)
                Next
                TW.WriteLine("")
            Next
            TW.Flush()
            TW.Close()
        End Using

    End Sub

    Public Function GetGruppoByNome(ByVal nomeGruppo As String) As Gruppo

        For Each G As Gruppo In Me
            If G.Nome = nomeGruppo Then
                Return G
            End If
        Next
        Return Nothing

    End Function

End Class
A questo punto Caricare, Salvare, Cercare e Modificare Gruppi / Chiavi / Valori nel File Ini diventa molto semplice :

Codice:
        'Carica
        Dim INI As New FileIni(Application.StartupPath & "\TEST.ini")
        INI.Carica()
       
        'Trova, Modifica e Salva
        INI.GetGruppoByNome("[XGame.xDeathMatch]").GetChiaveByNome("TimeLimit").Valore = "100"
        INI.GetGruppoByNome("[XGame.xTeamGame]").GetChiaveByNome("bTeamScoreRound").Valore = "True"

        INI.Salva()
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 13:53   #13
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Puoi vedere un File INI come una collezione di Gruppi, un Gruppo come una collezione di Chiavi ( coppie di nomeChiave e valoreChiave ), in questo modo rendi tutto più organico e leggibile.

Personalmente risolverei con alcune semplici Classi :

...
grande! se non fosse per qualche piccola differenza sarebbe una traduzione perfetta.
mi servirà anche la versione vb.net, grazie.

ciao a tutti e tre i partecipanti alla discussione.
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 14:01   #14
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da U235 Guarda i messaggi
se non fosse per qualche piccola differenza sarebbe una traduzione perfetta.
Traduzione... di che ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 14:56   #15
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Traduzione... di che ?
è praticamente uguale alla classe che ho postato io tradotta in vb.net, pensavo fosse voluto...
__________________
Un elemento come me quando si fissa fa sempre un gran casino, ma solo nel 45 ciò è stato negativo . Little Boy era mio nonno
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 15:29   #16
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da U235 Guarda i messaggi
è praticamente uguale alla classe che ho postato io tradotta in vb.net, pensavo fosse voluto...
Ah ok. No, infatti il tuo codice C# non l'avevo proprio letto.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2009, 20:49   #17
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168

Complimenti a tutti ragazzi, siete dei grandi... ora mi studio quello che avete postato e provo... vi farò sapere presto.

non mi è chiaro dove immettere il valore testuale della mia label come percorso del file da caricare...
__________________
D@x

Ultima modifica di daxdaxdax : 03-11-2009 alle 22:30.
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2009, 08:41   #18
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da daxdaxdax Guarda i messaggi
non mi è chiaro dove immettere il valore testuale della mia label come percorso del file da caricare...
Nel metodo costruttore della classe FileIni, perciò :

Codice:
Dim INI As New FileIni( percorso )
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2009, 18:54   #19
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
ok! e.. tutte le stringhe da caricare le devo dichiarare nella pubblic sub carica?

forse ho capito..
TextBox1.Text = INI.GetGruppoByNome("Engine.GameReplicationInfo]").GetChiaveByNome("ServerName").Valore
__________________
D@x

Ultima modifica di daxdaxdax : 04-11-2009 alle 19:03.
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2009, 19:10   #20
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da daxdaxdax Guarda i messaggi
ok! e.. tutte le stringhe da caricare le devo dichiarare nella pubblic sub carica?
No, non devi dichiarare nulla. Quando fai :
Codice:
        Dim INI As New FileIni( percorso )
        INI.Carica()
il metodo Carica() apre il file .ini, lo legge e riempie l'oggetto INI ( che eredita da List(Of Gruppo) ), con tutti i Gruppi trovati, e ciascun Gruppo con tutte le chiavi trovate. Comodo, no ?

Quando hai l'oggetto INI, il 90% del lavoro l'ha già fatto la mia classe. A te resta di fare il binding con le textbox sulla Form. Una tecnica possibile ed elegante è di creare un controllo GroupBox ( anche dinamicamente ) per ogni Gruppo trovato in INI, a cui aggiungere una TextBox per ogni Chiave...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
Gli astronauti cinesi di Shenzhou-20 son...
Mai così tanti gas serra: il 2025...
Google condannata in Germania: favorito ...
Ubisoft rimanda i risultati finanziari e...
ADATA porta i primi moduli DDR5 CUDIMM 4...
Bob Iger anticipa le novità AI di...
Microsoft Teams 'spierà' i dipend...
Michael Burry chiude Scion e fa di nuovo...
Huawei prepara i nuovi Mate 80: fino a 2...
Una e-Mountain Bike di qualità ma...
Tutte le offerte Amazon Black Friday pi&...
DJI Mini 4K Fly More Combo con 3 batteri...
Crollo di prezzo sui nuovissimi iPhone A...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v