Zapisanie listy do pliku

0

Witam, robię prosty kalkulator i chciałbym dodać mu funkcję zapisu wyników do pliku *.txt. Wyniki koniecznie muszą zapisywać się do listy, a następnie ta lista ma trafić do mojego pliku. Problem w tym, że zapisuje się tylko ostatni wynik - gdy kliknę buttona "=", natomiast, gdy będę chciał wklepać nowe działa nastąpi nadpisanie. Poniżej wklejam swój kod.

            List<string> ostatnie_wyniki = new List<string>();
            ostatnie_wyniki.Add(wyswietlacz.Text);
            File.WriteAllLines(@"C:\x.txt", ostatnie_wyniki);
1

Jeśli chcesz zapisywać w taki sposób, to listę ostatnie_wyniki twórz tylko raz, a nie w metodzie przycisku "=".
Ale lepiej by było użyć tej metody: https://msdn.microsoft.com/pl-pl/library/system.io.file.appendtext%28v=vs.110%29.aspx

0

Dzięki wielkie!
Mam natomiast drugie pytanie - związane z odczytem. Zapisuje to jako lista i ładnie zapisują mi się wyniki jeden pod drugim. Teraz mam zrobione tak, że po kliknięciu przycisku otwiera mi się nowe okno i tam mają być wyświetlone wyniki - chodzi o to, że może być ich nieograniczona ilość, więc zwykły ekran odpada, musi być coś z funkcją skrolowania, aby prześledzić wyniki. Jaki więc bloczek wstawić aby była taka możliwość? Odczytywać będę to kodem podanym poniżej.

string[] t = File.ReadAllLines(@"d:\x.txt");

+Wiem, że moje pytania są pewnie banalne ale dopiero zaczynam przygodę z C# :)

0

Jak wyświetlasz w TextBlock'u to wystarczy coś takiego:

<ScrollViewer>
    <TextBlock />
</ScrollViewer>

Jeśli jest to TextBox to:

<TextBox ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"  />

Przy porpertach Auto scrollbary pojawią się jeśli będą potrzebne tj. tekst się nie zmieści w danym obszarze. Przy ustawieniu Visible scrolle będą zawsze widoczne.

0

Musisz użyć kontrolki RichTextBox

Wtedy jak masz tą swoją tablicę to po prostu:

//Jeżeli nazwałeś swój richTextBox tak jak.

 calculatorResultsRichTextBox.Lines = File.ReadAllLines("D:\\ścieżkaDoPliku.txt"); 

Ale prawdopodobnie trzeba by było to zrobić trochę inaczej (wczytywać potrzebną ilość linii przez strumień - bo jeżeli teoretycznie ten plik waży więcej niż masz RAM'u to się nie uda) lecz to także będzie dobrze działać

Pozdr.

0

Okej, zrobiłem to w metodzie RichTextBox (poniżej) i wyskakuje błąd - The name 'calculatorRichTextBox' does not exist int the current context.
private void RichTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
calculatorResultsRichTextBox.Lines = File.ReadAllLines("C:\x.txt");
}

0

ehhh,
Twój obiekt RichTextBox (RichTextBox) nazywa się inaczej niż mój (calculatorResultRichTextBox) dlatego wyskakuje ten błąd (przeczytaj informacje o tym błędzie).
Dodaj sobie jakiś button (albo umieść ten kod w metodzie od przycisku '=' o której pisałeś na początku) i w tym buttonie napisz to co wcześniej tylko zamisat calculatorResults... daj RichTextBox (czy jak on tam się Ciebie nazywa).
Pozdr.

0

No okej, zmieniłem nazwę ale i tak wyskakuje błąd związany z .Lines (tak jakby nie rozumiał tego). Generalnie po wciśnięciu przycisku na głównym oknie ma wyskakiwać nowe okno z RichTextBoxem, gdzie ma być pokazana moja lista. Jak zatem mam połączyć kontrolkę od wyskakiwania (które jest w głównym oknie) z nazwą mojego RichTextBoxa które jest w wyskakującym oknie?

0

Dokładnie wyskakuje taki błąd - 'System.Windows.Controls.RichTextBox' does not contain a definition for 'Lines' and no extension method 'Lines' accepting a first argument of type 'System.Windows.Controls.RichTextBox' could be found

0

Okej dobra działa, dzięki wielkie! :)
Mam tylko pytanie, zapisuję wyniki tak, że najnowszy jest na dole, odczytuję tak, że najstarszy jest pierwszy, jak to zamienić?

0

Dodawaj linijki na początku RichEdit, zamiast na końcu.
Albo odwróć wynik funkcji ReadAllLines - https://msdn.microsoft.com/pl-pl/library/d3877932%28v=vs.110%29.aspx

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