Wyświetlenie treści pliku TXT w ListBox

2011-12-21 17:19

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

Witam,

Przerabiam program z C++ na C#, a w zasadzie to piszę program w C# na podstawie tego napisanego w C++.

Napotkałem na 2 problemy i nie wiem jak z nich wybrnąć:
1) Po kliknięciu buttona ma otworzyć się openDialog i po wybraniu pliku (plik txt) zawartość ma zostać przepisana do listboxa (w listboxie znajduje się lista)
w C++ miałem to tak:


void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{
   if(OpenDialog1->Execute())
    {
        ListBox1->Items->LoadFromFile(OpenDialog1->FileName);

    }
}

W C# próbowałem tak ale nie wychodzi zbytnio to:

{
         using (OpenFileDialog open = new OpenFileDialog())
             {
                 if (open.ShowDialog() == DialogResult.OK)
                 {
                 try
                 {
                 open.ShowDialog();
                 StreamReader Import = new StreamReader(Convert.ToString(open.FileName));
                 while (Import.Peek() >= 0)
                 listBox1.Items.Add(Convert.ToString(Import.ReadLine()));
                 }
                 catch (Exception ex)
                 {
                 MessageBox.Show(Convert.ToString(ex.Message));
                 return;
                 }
                 }
             }

        }

2)Za pomocą OpenDialoga wybieram plik i jego nazwa dodawana jest do listbox

W C++ miałem tak:


void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
    if(OpenDialog2->Execute())
    {
         ListBox1->Items->Add(ExtractFileName(OpenDialog2->FileName));
    }
}

W C# nie mam pojęcia jak to ogarnąć

edytowany 1x, ostatnio: madmike, 2011-12-22 15:55

Pozostało 580 znaków

2011-12-21 18:29

Rejestracja: 9 lat temu

Ostatnio: 2 lata temu

1

Pierwsze - za bardzo przekombinowane. Tak prościej:

listBox1.Items.AddRange(File.ReadAllLines(open.FileName));

Co do drugiego: http://msdn.microsoft.com/en-[...]nfiledialog.safefilename.aspx

listBox1.Items.Add(open.SafeFileName);

Przy okazji: zlituj się i nazywaj zmienne sensownie. Form1, listBox1, button1... to jest koszmar.

P.S. Te wszystkie Convert.ToString są po prostu bez sensu. Powiedz mi po co zmieniać string na string?
P.S. 2 Łapanie wyjątków na pokemony (catch 'em all) to też nie jest dobry pomysł.


edytowany 4x, ostatnio: byku_guzio, 2011-12-21 18:32
Dlaczego "catch 'em all" to kiepski pomysł? - Signum 2011-12-21 20:12

Pozostało 580 znaków

2011-12-21 19:46

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

Dzięki, Drugie działa, ale co do pierwszego to zrobiłem tak:


        private void button5_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog open = new OpenFileDialog())
            {
                open.Filter = "txt files|*.txt";
                if (open.ShowDialog() == DialogResult.OK)
                {
                   listBox1.Items.AddRange(File.ReadAllLines(open.FileName));
                }
            }
        }

i wychodzi błąd odnośnie "File"

jaki błąd? - byku_guzio 2011-12-21 19:54

Pozostało 580 znaków

2011-12-21 19:47

Rejestracja: 16 lat temu

Ostatnio: 6 godzin temu

Przy czym SafeFileName jest specyficzne dla klasy OpenDialog. Rozwiązanie ogólne (gdy nie mamy dialogu) to Path.GetFileName("c:\\ścieżka\\do\\pliku.txt")

i wychodzi błąd odnośnie "File"

może brakuje using System.IO; ?

edytowany 2x, ostatnio: Azarien, 2011-12-21 19:48

Pozostało 580 znaków

2011-12-21 19:56

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

fakt, zgapiłem się
Sory, wszystko bangla jak trzeba

Dzięki i pozdro

Pozostało 580 znaków

2011-12-21 20:39

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

Ok teraz ciąg dalszy

Witam,

Dzięki za pomoc,

Możesz mi jeszcze podpowiedzieć jak wymodzić pewną rzecz?

Mianowicie w C++ miałem klasę Play, która odpowiadała za odegranie pliku wav zaznaczonego w listBox


void __fastcall TForm1::Play()
{
    a=ListBox1->ItemIndex;
    if (ListBox1->ItemIndex==-1)
    {
        a=0;
    }
    AnsiString nazwa=ListBox1->Items->Strings[a];
    Label3->Caption=nazwa;
    sprintf(sciezka, "%s", nazwa.c_str());
    PlaySound(sciezka, NULL, SND_FILENAME | SND_ASYNC);
    }

Zrobiłem już wybieranie elementu z listBox-a i zapewnienie zerowego elementu przy niezaznaczonym żadnym
Nie wiem teraz jak do labela przyporządkować itema od a
I jeszcze problem jak pobrać całą ścieżkę do pliku, który dodałem do listboxa


        private void button1_Click(object sender, EventArgs e)
        {//PLAY
         int a;
         a = listBox1.SelectedIndex;
            if (a == -1)
            {
                a = 0;
            }
            SoundPlayer _Sound = new SoundPlayer( i tu potrzebuję ścieżkę);
            _Sound = Play();

        }

Dzięki z góry za pomoc

Pozostało 580 znaków

2011-12-21 22:15

Rejestracja: 10 lat temu

Ostatnio: 7 lat temu

0
 listBox1.Items[a].ToString();

??

pozdrawiam
gibon93

Pozostało 580 znaków

2011-12-21 22:55

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

już wszystko ogarnięte :)

Dzięki za pomoc :)

edytowany 4x, ostatnio: pablo1989, 2011-12-22 00:02

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0