Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
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


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Al centro della Via Lattea ci potrebbe e...
Elon Musk ora guarda alla Luna: SpaceX p...
La Cina ha lanciato nuovamente lo spazio...
Blue Origin potrebbe realizzare il lande...
Artemis II: il prossimo Wet Dress Rehear...
Il nuovo HONOR 600 sta arrivando e avr&a...
La crisi delle memorie non coinvolger&ag...
Windows domina su Steam, ma molti utenti...
Per non incorrere in nuovi aumenti delle...
Cubi Z AI 8M visto da vicino, un mini-PC...
Datacenter nello Spazio, affascinante ma...
Social e minori, Butti apre al dibattito...
Tutte le offerte Amazon del weekend, sol...
Amazon spinge sull'usato garantito: 10% ...
TikTok rischia una maxi-multa in Europa:...
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: 05:48.


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