Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - FAQs
Forum - C# / VB.NET - FAQs

Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:45
Giovedì, 11/12/2008
Riporto qui alcune domande postate troppo spesso, con relativa risposta:


Come si salvano gli elementi di una listbox su file txt?
Ovviamente, scrivendo sul file di testo i suoi elementi. Per scorrere gli elementi si usa una enumerazione (ciclo for); per scriverli si usa la classe StreamWriter.
Codice sorgente - presumibilmente VB.NET

  1. Dim Writer As New IO.StreamWriter("FileName")
  2. For i As Integer = 0 To ListBox1.Items.Count - 1
  3.   Writer.WriteLine(ListBox1.Items.Item(i))
  4. Next
  5. Writer.Close()



Riferimenti:
- Struttura For
http://totem.altervista.org/guida/versione2/A14.php
- Uso di ListBox e ComboBox
http://totem.altervista.org/guida/versione2/B4.php
- Scrittura e lettura di file
http://totem.altervista.org/guida/versione2/B8.php

Discussione:
http://www.pierotofy.it/pages/extras/forum/16/46067-salvar ...


Come si fa ad impostare un programma predefinito per una certa estensione?
Per associare un programma predefinito a un'estensione particolae di file bisogna modificare il registro di sistema. Il luogo dove vengono depositate tutte le informazioni sulle estensioni è la chiave globale HKEY_CLASSES_ROOT. In essa sono presenti moltissime sottochiavi con il nome dell'estensione.
Quindi, per prima cosa si deve creare in questa chiave globale una sottochiave col nome dell'estensione (es.: ".new"). All'intero di quest'ultima, si deve modificare il valore (Predefinito) con un nome sintetico che descriva l'applicazione usata e il tipo di file (es.: "MyProgramNew").
Dopodiché, sempre all'interno di HKEY_CLASSES_ROOT, si crea un'altra sottochiave di primo livello, usando lo stesso nome inserito come valore predefinito in precedenza (es.: "MyProgramNew"). All'interno di questa chiave, il valore (Predefinito) può essere modificato a piacere a indica la descrizione che apparirà nell'explorer (es.: "File NEW"). Per creare un collegamento con l'applicazione predefinita, si devono creare le sottochiavi shell\open\command: all'interno dell'ultima (command), il valore (Predefinito) deve essere il percorso dell'applicazione predefinita per l'apertura, seguita da "%1" o "%l" (es.: "C:\Programmi\MyProgram\MyProgram.exe" "%1").
Per quanto riguarda il codice:
Codice sorgente - presumibilmente VB.NET

  1. Imports Microsoft.Win32
  2.  
  3. '...
  4.  
  5. Private Sub RegisterProgram()
  6.     Dim RegKey As RegistryKey = Registry.ClassesRoot.OpenSubKey(".New")
  7.     Dim WParam As RegistryKeyPermissionCheck = RegistryKeyPermissionCheck.ReadWriteSubTree
  8.  
  9.     If RegKey IsNot Nothing Then
  10.         Exit Sub
  11.     End If
  12.  
  13.     RegKey = Registry.ClassesRoot.CreateSubKey(".New", WParam)
  14.     RegKey.SetValue("", "MyProgramNew")
  15.     RegKey = Registry.ClassesRoot.CreateSubKey("MyProgramNew", WParam)
  16.     RegKey.SetValue("", "File New")
  17.     RegKey = Registry.ClassesRoot.OpenSubKey("MyProgramNew", True)
  18.     RegKey = RegKey.CreateSubKey("shell\open\command", WParam)
  19.     RegKey.SetValue("", String.Format("""{0}"" ""%1""", Application.ExecutablePath))
  20. End Sub


Ovviamente se non dite al programma cosa fare, lui se ne fa un baffo del percorso che riceve in input. Bisogna controllare i parametri da linea di comando:
Codice sorgente - presumibilmente Delphi

  1. If My.Application.CommandLineArgs.Count > 0 Then
  2.   'Ci sono parametri: il primo è il percorso del file da aprire
  3.  Dim Path as string = My.Application.CommandLineArgs(0)
  4. End If



"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:38
Lunedì, 30/03/2009
Come si aggiunge del testo a una stringa/TextBox/RichTextBox/Label?
Non capisco perchè sia così difficile da comprendere. L'operatore = IMPOSTA il testo: ciò significa che se scrivete:
Codice sorgente - presumibilmente Plain Text

  1. Label1.Text = "ciao"


quello che ottenente è un CAMBIAMENTO di valore del testo (questo vale anche per variabili stringa), e NON un'AGGIUNTA. Se volete effettivamente aggiungere qualcosa alla fine di una stringa, dovete usare l'operatore += o &=, ad esempio:
Codice sorgente - presumibilmente VB.NET

  1. Dim A As String = "Ciao"
  2. Dim B As String = " Totem"
  3.  
  4. A += B '> "Ciao Totem"




Come si passano variabili da un form a un altro?
Le variabili, ed in generale i membri, di un form sono esclusivi e unici per quel form, perciò NON si possono richiamare da alcun altro form. Il compilatore non è onniscente e non esiste alcun tipo di magia che faccia valere i membri di un form anche per un altro. Essi vanno esplicitamente posti in un luogo accessibile a tutti i form, ossia un modulo (o classe statica). Il modulo è solitamente dichiarato in un file separato e contiene solo quei membri che è necessario condividere tra tutte le parti dell'applicazione.
In VB.NET:
Codice sorgente - presumibilmente VB.NET

  1. Module Globals
  2.   Public Const C As Int32 = 300
  3.  
  4.   Public Sub DoSomething()
  5.  
  6.   End Sub
  7. End Module


In C#
Codice sorgente - presumibilmente C++

  1. static class Globals
  2. {
  3.   public const int C = 300;
  4.  
  5.   public void DoSomething()
  6.   {
  7.  
  8.   }
  9. }



In VB.NET esiste il namespace My, che gode della proprietà Forms, nella quale sono contenuti i riferimenti alle istanze di default dei form. My.Forms.Form1 indica il primo form (se si chiama Form1) e gli altri sono denominati di conseguenza. E' possibile accedere a un qualsiasi form da My.Forms a patto che tale form NON sia stato creato da codice dal programmatore, poiché in quel caso sarebbe un'altra istanza della classe in questione e non quella di default.

Ultima modifica effettuata da Il Totem il 31/12/2009 alle 10:21


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:21
Martedì, 20/07/2010
Come si associano più controlli a un indice / esistono le matrici di controlli?
In .NET non esistono le matrici di controlli, almeno non come i programmatori VB6 sono abituati a conoscerle. Dato che ogni controllo è un oggetto, è possibile dichiarare array di controlli così come si dichiarano array di qualsiasi altro tipo:
Codice sorgente - presumibilmente VB.NET

  1. 'Dichiara un array di Button
  2. Dim Buttons(9) As Button
  3.  
  4. 'Inizializza ogni controllo
  5. For I As Byte = 0 To 9
  6.    Buttons(I) = New Button()
  7.    Buttons(I).Location = New Point(10, I * 25)
  8.    Buttons(I).Size = New Size(70, 20)
  9. Next


Per aggiungere i controlli creati a un form o a un qualsiasi controllo contenitore (GroupBox, Panel, PictureBox, eccetera...) basta aggiungerli alla proprietà Controls:
Codice sorgente - presumibilmente VB.NET

  1. Dim B As New Button() With {.Location = New Point(10, 10), .Size = New Size(70, 20)}
  2. Me.Controls.Add(B)


E' possibile fare la stessa cosa con più controlli. Una volta aggiunti alla collezione, ogni controllo viene visualizzato nella GUI, ed è accessibile tramite un indice o una chiave all'interno della suddetta collezione.
Codice sorgente - presumibilmente VB.NET

  1. For I As Int32 = 0 To Me.Controls.Count - 1
  2.    Me.Controls(I).Text = "Ciao"
  3. Next
  4.  
  5. 'oppure
  6.  
  7. Me.Controls("txtNome").Text = "Luca"
  8.  
  9. 'oppure, ancora:
  10.  
  11. For Each C As Control In Me.Controls
  12.    If TypeOf C Is ListBox Then
  13.       DirectCast(C, ListBox).Items.Add("Fuffa")
  14.    End If
  15. Next



"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:32
Domenica, 22/08/2010
Come si leggono solo certe righe di un file di testo?
Ci sono almeno tre modi per farlo.
1 - Si legge tutto il file di testo e si usa la funzione String.Split per spezzarlo in tante sottostringhe divise da un certo carattere, che in questo caso sarà l'a capo:
Codice sorgente - presumibilmente VB.NET

  1. Dim File As String = IO.File.ReadAllText("percorso")
  2. Dim Lines() As String = File.Split(Environment.NewLine)


Lines è un array che contiene tutte le sottostringhe del contenuto del file separate dal carattere a capo, ossia contiene in ogni cella una singola riga di testo. Per accedere a quelle volute, si usa un indice:
Codice sorgente - presumibilmente VB.NET

  1. Dim Line1 As String = Lines(0) 'prima riga
  2. Dim Line5 As String = Lines(4) 'quinta riga


E' possibile leggere e modificare il contenuto dell'array. Se vi vuole salvare ancora tutto sul file di testo, basta scrivere tutte le linee:
Codice sorgente - presumibilmente VB.NET

  1. Dim W As New IO.StreamWriter("percorso")
  2. For Each Line As String In Lines
  3.    W.WriteLine(Line)
  4. Next
  5. W.Close()



2 - Alternativa più corta al metodo precedente. Per leggere tutte le linee si usa:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim Lines() As String = IO.File.ReadAllLines("percorso")


Per scrivere tutto direttamente sul file, invece:
Codice sorgente - presumibilmente Plain Text

  1. IO.File.WriteAllLines(Lines)



3 - Si utilizza un buffer di caratteri per immagazzinare tutti i caratteri del file fino all'a capo in una variabile. Dopodiché essa viene aggiunta a una lista. Si continua a bufferizzare fino alla fine del file.

Ultima modifica effettuata da Il Totem il 22/08/2010 alle 10:33


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote