Winforms — Listbox не будет обновлять содержимое до щелчка

#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;
            }
        }
    }
}