#c# #winforms #listbox
#c# #winforms #listbox
Вопрос:
Я постараюсь добавить столько информации, сколько необходимо, пожалуйста, скажите мне, нужна ли вам какая-либо дополнительная информация, которую я не добавил, и я сделаю все возможное, чтобы предоставить ее.
Суть моей проблемы заключается в том, что при каждом нажатии кнопки она захватывает выбранный мной файл и сохраняет его в текстовый файл. Это работает нормально, и я могу сохранить столько файлов, сколько необходимо. Проблема заключается в списке моего списка. Мое приложение — это звуковая панель, и я хочу, чтобы имена файлов с их горячими клавишами отображались в списке, который почти работает нормально. При загрузке приложения listbox будет принимать все сохраненные файлы и отображать их соответствующим образом один раз, а при добавлении файла файл будет добавлен в listbox и сохранен. Как я уже сказал, это почти работает, потому что по какой-то неизвестной мне причине вам нужно щелкнуть список, чтобы добавить содержимое. Мой код выглядит следующим образом:
public partial class Form1 : Form
{
public int getNumberOfSongs()
{
using (Stream stream = File.Open(@"Sounds.txt", FileMode.Open))
{
using (StreamReader reader = new StreamReader(stream))
{
string line = null;
for (int i = 0; i < 1; i)
{
line = reader.ReadLine();
int ine = Int32.Parse(line);
ine = ine 1;
return ine;
}
}
}
return 8;
//This is only here so it doesn't give me an error, it is never used
}
public void fineChanger(string newText, string fileName, int line_to_edit)
{
string[] arrLine = File.ReadAllLines(fileName);
arrLine[line_to_edit] = newText;
File.WriteAllLines(fileName, arrLine);
}
public void addFile()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = "c:\";
openFileDialog.Filter = "WAV files (*.wav)|*.wav";
openFileDialog.DefaultExt = ".wav";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//Get the path of specified file
string filePath = openFileDialog.FileName;
songToAdd = filePath;
string control = filePath "§modifier§hotkey";
string savePath = @"Sounds.txt";
int bruh = getNumberOfSongs();
fineChanger(control, savePath, bruh);
string bru = bruh.ToString();
fineChanger(bru, savePath, 0);
add = true;
}
}
public bool add = false;
public string songToAdd;
public bool load = true;
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
addFile();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (load == true)
{
listBox1.DataSource = File.ReadAllLines(@"Sounds.txt");
load = false;
}
if(add == true)
{
listBox1.Items.Add(songToAdd);
add = false;
}
}
}
PS Я все еще новичок в Windows forms, и это приложение еще далеко не готово.
Комментарии:
1. На самом деле вы добавляете данные только
listBox1.Items
в SelectedIndexChanged . Почему бы вам не сделать это в концеaddFile
?2. Не могу поверить, что я об этом не подумал, позвольте мне попробовать.
3.
getNumberOfSongs
— с этим методом связано немало проблем,
Ответ №1:
Вместо добавления элементов в SelectedIndexChanged я добавил их снаружи. Я загружаю сохраненные песни Form1_Load
и открываю / сохраняю загруженные файлы в addFile()
функции. Отредактированный код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Media;
using System.Security.Cryptography.X509Certificates;
using System.Runtime;
using System.Runtime.InteropServices;
using Microsoft.VisualBasic;
using System.Diagnostics;
namespace SoundBoard
{
public partial class Form1 : Form
{
public int getNumberOfSongs()
{
using (Stream stream = File.Open(@"Sounds.txt", FileMode.Open))
{
using (StreamReader reader = new StreamReader(stream))
{
string line = null;
for (int i = 0; i < 1; i)
{
line = reader.ReadLine();
int ine = Int32.Parse(line);
ine = ine 1;
return ine;
}
}
}
return 8;
//This is only here so it doesn't give me an error, it is never used
}
public bool load = true;
public void fineChanger(string newText, string fileName, int line_to_edit)
{
string[] arrLine = File.ReadAllLines(fileName);
arrLine[line_to_edit] = newText;
File.WriteAllLines(fileName, arrLine);
}
public void addFile()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = "c:\";
openFileDialog.Filter = "WAV files (*.wav)|*.wav";
openFileDialog.DefaultExt = ".wav";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//Get the path of specified file
string filePath = openFileDialog.FileName;
string control = filePath "§modifier§hotkey";
string savePath = @"Sounds.txt";
int bruh = getNumberOfSongs();
fineChanger(control, savePath, bruh);
string bru = bruh.ToString();
fineChanger(bru, savePath, 0);
listBox1.Items.Add(filePath);
}
}
public bool loada = true;
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
addFile();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
if (loada == true)
{
listBox1.Items.Add(File.ReadAllLines(@"Sounds.txt"));
loada = false;
}
}
}
}