En este ejemplo, se lee el contenido de un fichero de texto línea a línea y se asigna a los elementos de un ListBox, un ComboBox y un ListView, es decir, controles que tienen la propiedad Items. Las líneas en blanco no se asignan.
Creo que el título y la descripción lo dicen todo.
En este ejemplo se abre un fichero de texto, se va leyendo cada línea, y si no está en blanco, se asigna a tres controles de prueba, uno es un ListBox, otro es un ComboBox y el tercero es un ListView.
Al abrir el fichero, usando un StreamReader, se abre con el formato predeterminado de Windows (Encoding.Default), pero se pasa un valor True al tercer parámetro, por si la codificación es diferente.
El código es bien sencillo, se abre el fichero, se lee cada línea con el método ReadLine, se comprueba si no está vacío lo que se ha leído, y en caso de que haya algo en esa línea, se asigna a la propiedad Items del control en cuestión.
Te muestro el código para Visual Basic y para C#. En estos ejemplos, la versión usada es la 2005, ya que se usa el método IsNullOrEmpty de la clase String para comprobar si una cadena está vacía y en el caso de Visual Basic, se usa Continue While para saltar a la siguiente línea del fichero.
En el caso del ComboBox, al final se comprueba si tiene elementos, y en caso de que si tenga, se muestra el primero asignando un valor cero (el primer elemento siempre es el de índice cero) a la propiedad SelectedIndex.
Este es el aspecto del formulario en tiempo de diseño:
Figura 1. El formulario en tiempo de diseño
Espero que te sea de utilidad.
Nos vemos.
Guillermo
P.S.
Más a bajo tienes el código completo para Visual Basic 2005
y para Visual C# 2005, así como un ZIP con
los dos proyectos.
'------------------------------------------------------------------------------ ' Leer el contenido de un fichero de texto y asignarlo (17/Abr/07) ' a un ComboBox, un ListBox y un ListView ' ' ©Guillermo 'guille' Som, 2007 '------------------------------------------------------------------------------ Option Strict On Imports Microsoft.VisualBasic Imports System Imports System.Windows.Forms Imports System.Drawing Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load Me.txtFichero.Text = "E:\tmp\prueba.txt" End Sub Private Sub btnExaminar_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles btnExaminar.Click Dim oFD As New OpenFileDialog With oFD .Title = "Seleccionar fichero" .Filter = "Ficheros de texto (*.txt;*.ini)|*.txt;*.ini" & _ "|Todos los ficheros (*.*)|*.*" .FileName = Me.txtFichero.Text If .ShowDialog = System.Windows.Forms.DialogResult.OK Then Me.txtFichero.Text = .FileName End If End With End Sub Private Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles btnLeer.Click ' Leer el contenido y asignar cada línea a los controles ' Comprobar que existe If System.IO.File.Exists(Me.txtFichero.Text) = False Then MessageBox.Show("Debes indicar un fichero que exista", _ "Leer fichero", _ MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End If ' Borrar el contenido previo de los controles Me.listBoxContenido.Items.Clear() Me.comboBoxContenido.Items.Clear() Me.listViewContenido.Items.Clear() ' Leer el fichero usando la codificación de Windows ' pero pudiendo usar la marca de tipo de fichero (BOM) Dim sr As New System.IO.StreamReader( _ Me.txtFichero.Text, _ System.Text.Encoding.Default, _ True) ' Leer el contenido mientras no se llegue al final While sr.Peek() <> -1 ' Leer una líena del fichero Dim s As String = sr.ReadLine() ' Si no está vacía, añadirla al control ' Si está vacía, continuar el bucle If String.IsNullOrEmpty(s) Then Continue While End If Me.listBoxContenido.Items.Add(s) Me.comboBoxContenido.Items.Add(s) Me.listViewContenido.Items.Add(s) End While ' Cerrar el fichero sr.Close() ' Si el combo tiene algo, seleccionar el primero If Me.comboBoxContenido.Items.Count > 0 Then Me.comboBoxContenido.SelectedIndex = 0 End If End Sub End Class
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.txtFichero.Text = @"E:\tmp\prueba.txt"; } private void btnExaminar_Click(object sender, EventArgs e) { OpenFileDialog oFD = new OpenFileDialog(); oFD.Title = "Seleccionar fichero"; oFD.Filter = "Ficheros de texto (*.txt;*.ini)|*.txt;*.ini" + "|Todos los ficheros (*.*)|*.*"; oFD.FileName = this.txtFichero.Text; if (oFD.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this.txtFichero.Text = oFD.FileName; } } private void btnLeer_Click(object sender, EventArgs e) { // Leer el contenido y asignar cada línea a los controles // Comprobar que existe if (System.IO.File.Exists(this.txtFichero.Text) == false) { MessageBox.Show("Debes indicar un fichero que exista", "Leer fichero", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } // Borrar el contenido previo de los controles this.listBoxContenido.Items.Clear(); this.comboBoxContenido.Items.Clear(); this.listViewContenido.Items.Clear(); // Leer el fichero usando la codificación de Windows // pero pudiendo usar la marca de tipo de fichero (BOM) System.IO.StreamReader sr = new System.IO.StreamReader( this.txtFichero.Text, System.Text.Encoding.Default, true); // Leer el contenido mientras no se llegue al final while (sr.Peek() != -1) { // Leer una líena del fichero string s = sr.ReadLine(); // Si no está vacía, añadirla al control // Si está vacía, continuar el bucle if (String.IsNullOrEmpty(s)) { continue; } this.listBoxContenido.Items.Add(s); this.comboBoxContenido.Items.Add(s); this.listViewContenido.Items.Add(s); } // Cerrar el fichero sr.Close(); // Si el combo tiene algo, seleccionar el primero if (this.comboBoxContenido.Items.Count > 0) { this.comboBoxContenido.SelectedIndex = 0; } } }
System.Windows.Forms
System.IO
System.Text
Fichero con el código de ejemplo:
LeerFicheroTexto_asignarloControl.zip - 23.8 KB
Contiene los proyectos para Visual Basic 2005 y Visual C# 2005.
(MD5
checksum: 884FCA70860510569369DA8073D7F54F)