Member 13066145 Ответов: 3

C# необработанное исключение типа "system.nullreferenceexception" произошло в folderbrowser.exe


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 WMPLib;

using System.Media;

namespace folderBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        internal class ListItem
        {
            string path;
            private string v;

            public ListItem(string v)
            {
                this.v = v;
            }
        }
        private string v;
        public ListBox.SelectedIndexCollection SelectedIndices { get; }
        SoundPlayer player = new SoundPlayer();
        WindowsMediaPlayer myplayer = new WindowsMediaPlayer();

        private void button1_Click(object sender, EventArgs e)
        {
            string[] filters = { "*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp" };

            var directory = new DirectoryInfo(@"D:\Dogukan\Ingcart");

            var files = new List<fileinfo>();

            foreach (var filter in filters)
            {
                var results = directory.GetFiles(filter, SearchOption.AllDirectories);
                files.AddRange(results);
            }

            foreach (FileInfo file in files)
            {
                //ListItem a = new ListItem(Path.GetFileNameWithoutExtension(file.FullName));
                //listBox1.Items.Add(a);
                listBox1.Items.Add(Path.GetFileNameWithoutExtension(file.FullName));
            }
        }

        private void listBox1_MouseClick(object sender, MouseEventArgs e)
        {

                 pictureBox1.Image = Image.FromFile(((FileInfo)listBox1.SelectedValue).FullName);
                // pictureBox1.Image = Image.FromFile(((FileInfo)listBox1.SelectedItem).ToString());
                textBox1.Text = listBox1.SelectedItem.ToString();


        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //pictureBox1.Image = Image.FromFile(((FileInfo)listBox1.SelectedItem).FullName);
            pictureBox1.Image = Image.FromFile(((FileInfo)listBox1.SelectedValue).FullName);
            textBox1.Text = listBox1.SelectedItem.ToString();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            myplayer.URL = @"D:\Dogukan\" + "//" + listBox1.SelectedItem.ToString() + ".mp3";

            myplayer.controls.play();
        }
        private void FindMyString(string searchString)
        {
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                if (listBox1.Items[i].ToString().IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    listBox1.SetSelected(i, true);
                }
                else {
                    // Do this if you want to select in the ListBox only the results of the latest search.
                    listBox1.SetSelected(i, false);
                }
            }
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            //int index = listBox1.FindString(this.textBox2.Text);
            //if (0 <= index)
            //{
            //    listBox1.SelectedIndex = index;
            //}

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
 }


Что я уже пробовал:

private void listBox1_MouseClick(object sender, MouseEventArgs e)
Я пишу pictureBox1.Image = Image.FromFile(((FileInfo)listBox1.SelectedItem).FullName); код, когда я запустил программу и загрузил картинку, просмотр файлов в listBox1, чем я щелкнул мышью по файлу error System.NullReferenceException ' произошел в folderBrowser.exe. Что я должен делать ?

[no name]

"Что я должен делать ?", отлаживать ваш код и исправлять вашу нулевую ссылку.

Member 13066145

Извините, я не очень хорошо знаю c#. где я исправлю свою нулевую ссылку?

3 Ответов

Рейтинг:
9

Member 13066145

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
используя системы.Сведения;
использование системы.Рисование;
использование System. Linq;
используя системы.Текст;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
использование системы.ИО;

использование WMPLib;

использование системы.Средства массовой информации;

пространство имен folderBrowser
{
общественности частичного класс form1 : форма
{
открытый form1()
{
метод InitializeComponent();
}

класс fileItem
{
общественного строка имя { получить; набор; }
public string fileText { get; set; }
полное имя общественного строки { получить; набор; }
}

государственного управления ListBox.SelectedIndexCollection SelectedIndices { вам; }
SoundPlayer player = новый SoundPlayer();
WindowsMediaPlayer myplayer = новый WindowsMediaPlayer();

частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
строка[] фильтры = { "*.форматы jpg", "*.в формате JPEG", "*.файл PNG", "*.с GIF", "*.БМП" };

var directory = new DirectoryInfo (@"D:\Dogukan\Ingcart");

var files = новый список & lt;fileinfo>();

(фильтр по каждому элементу ВАР в фильтрах)
{
var results = каталог.GetFiles (filter, SearchOption.AllDirectories);
файлы.AddRange(результаты);
}

foreach (FileInfo file in files)
{
список listbox1.Предметы.Add (new fileItem { FileName = file.Имя, fileText = Path. GetFileNameWithoutExtension(file.Name), fullName = файл.Полное имя });
}
}

private void listBox1_MouseClick(отправитель объекта, MouseEventArgs e)
{
имя picturebox1.Образ = Образ.FromFile (((fileItem)listBox1. SelectedItem).полное имя);
текстовое поле textbox1.Текст = ((fileItem)список listbox1.Для selecteditem).fileText;
}

private void listBox1_SelectedIndexChanged(отправитель объекта, EventArgs e)
{
имя picturebox1.Образ = Образ.FromFile (((fileItem)listBox1. SelectedItem).полное имя);
текстовое поле textbox1.Текст = ((fileItem)список listbox1.Для selecteditem).fileText;

}

частная pictureBox1_Click недействительным(объект отправителя, EventArgs в электронной)
{
мой игрок.URL-адрес = @"D:\Dogukan\" + "//" + ((fileItem)список listbox1.Для selecteditem).fileText +".МР3";

игрока.контроля.играть();
}
private void FindMyString(строка поиска строки)
{
for (int i = 0; i < listBox1.Предметы.Граф; i++)
{
if (listBox1.Элементы[я].Метод toString().IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0)
{
список listbox1.SetSelected(я, правда);
}
ещё {
// Сделайте это, если вы хотите выбрать в списке только результаты последнего поиска.
список listbox1.SetSelected(я, ложь);
}
}
}

частная textBox2_TextChanged недействительным(объект отправителя, EventArgs в электронной)
{
показатель инт = список listbox1.FindString(это.поле textbox2.Текст);
если (0 <= индекс)
{
listBox1. SelectedIndex = индекс;
}

}

частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{
listBox1.DisplayMember = " fileText";
список listbox1.ValueMember = "Именем";

}
}
}


Richard Deeming

Если вы хотите обновить свой вопрос, Нажмите зеленую ссылку "улучшить вопрос" в нижней части вопроса.

НЕ опубликуйте свое обновление как "решение".

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
и удалите это решение.

Рейтинг:
1

Patrice T

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень забавный вид, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, на которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы сможете узнать!