c# - obtener - Secuencia de lectura de lista de elementos seleccionados
llenar listbox c# (1)
El ejemplo de código realmente debería ser más simple. Mucho más simple Y la descripción del problema más específica. Mucho más específico. Consulte https://stackoverflow.com/help/mcve y https://stackoverflow.com/help/how-to-ask
Dicho esto, creo que si cambia esta declaración en el método txtUpdate()
:
lstFiles.Items.Add(value + Environment.NewLine);
a esto:
lstFiles.Items.Add(value);
Funcionará. La excepción es probablemente causada por el hecho de que tiene caracteres de nueva línea en sus cadenas. Esto no solo hace que el nombre de archivo no sea el que desea, no es un carácter válido en las rutas de Windows.
También tenga en cuenta que los elementos en el ListBox
que ha agregado ya son string
. No necesita llamar a Convert.ToString()
en ellos. Puedes simplemente devolverlos a una string
:
String item = (string)lstFiles.SelectedItem;
Tengo una aplicación que lee un directorio, obtiene una lista de los archivos (segy) y rellena un cuadro de lista en el lado izquierdo de la aplicación con los nombres de los archivos. Al hacer clic en un elemento en el listox, me gustaría que el cuadro de texto enriquecido a la derecha muestre el contenido del archivo.
Tengo la aplicación en funcionamiento si uso openfiledialog para seleccionar uno de los archivos en el directorio, tengo problemas al intentar que el lector de flujo lea el archivo seleccionado en el que he hecho clic.
El código de trabajo simple openfiledialog a continuación.
openFileDialog1.Filter = "All Files|*.*";
openFileDialog1.Title = "Open SEG-Y Files";
DialogResult result = openFileDialog1.ShowDialog();
StreamReader readFile = new StreamReader(openFileDialog1.FileName, ebcdic);
readFile.BaseStream.Seek(0, SeekOrigin.Begin);
readFile.Read(data, 0, 3200);
string stringData = "";
for (int i = 0; i < data.Length; i++)
{
if ((i % 80) == 0 && stringData != "")
stringData += Environment.NewLine;
stringData += data[i].ToString();
}
rtbHeader.Text = stringData;
rtb.AppendText(value);
rtb.AppendText(System.Environment.NewLine);
Mi código
private void txtUpdate(string value)
{
lstFiles.Items.Add(value + Environment.NewLine);
lstFiles.TopIndex = lstFiles.Items.Count - 1;
lstFiles.Update();
}
private void btnFolder_Click(object sender, EventArgs e)
{
txtPath.Text = "";
lstFiles.Items.Clear();
rtbHeader.Clear();
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
txtPath.Text = folderBrowserDialog1.SelectedPath;
}
}
private void btnFiles_Click(object sender, EventArgs e)
{
lstFiles.Items.Clear();
string path = txtPath.Text;
List<string> files = new List<string>(Directory.EnumerateFiles(txtPath.Text, "*.sgy", SearchOption.AllDirectories).Select(Path.GetFileName).OrderBy(x => x));
if (files == null || files.All(x => string.IsNullOrWhiteSpace(x)))
{
MessageBox.Show("There are no files with extension" + " sgy", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
foreach (string file in files)
{
this.Invoke(new Action(() => txtUpdate(file)));
}
}
private void lstFiles_MouseClick(object sender, MouseEventArgs e)
{
rtbHeader.Clear();
String item = (Convert.ToString(lstFiles.SelectedItem));
//MessageBox.Show(item);
StreamReader readFile = new StreamReader(item, ebcdic);
readFile.BaseStream.Seek(0, SeekOrigin.Begin);
readFile.Read(data, 0, 3200);
string stringData = "";
for (int i = 0; i < data.Length; i++)
{
if ((i % 80) == 0 && stringData != "")
stringData += Environment.NewLine;
stringData += data[i].ToString();
}
rtbHeader.Text = stringData;
}
}
Recibo una excepción de Caracteres ilegales en la ruta en este bit.
StreamReader readFile = new StreamReader(item, ebcdic);
Gracias