Načtení TXT souboru do ComboBoxu a jen jeho prvních 10 řádků   otázka

VB.NET

Obracím se na vás s prosbou, jak si načtu TXT soubor do ComboBoxu a případně jak si uložím nové přírůstky a změny.

Načíst ho umím, jenže se mi zobrazí jen první řádek, ale další řádky už ne. :-(

Jde mi o to, že potřebuji si načíst 10 řádků, aby se mi zobrazovaly všechny v ComboBoxu.

Dále mě zlobí to, že když ukončím program, tak se mi v TXT souborech ten stávající text zduplikuje a zapíše do souboru, ale já potřebuji, aby reflektoval jen případné doplněné texty nebo celý změněný text a jen ten zapsal a nevím, jak to ošetřit; si s tím lámu hlavu celé dopoledne, ale nedaří se mi to. :-(

Zatím to mám vytvořené takto:

Public class
    Dim VarCteniPosledniPrikazy As New IO.StreamReader("\Files\PosledniPrikazy.txt", System.Text.Encoding.GetEncoding("windows-1250"))

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
	RtbDavka.Text = VarCteniDavky.ReadToEnd
	VarCteniDavky.Close()
	RtbHistoriePrikazu.Text = VarCteniHistoriePrikazu.ReadToEnd
	VarCteniHistoriePrikazu.Close()
	RtbLog.Text = VarCteniLogu.ReadToEnd
	VarCteniLogu.Close()
	'načíst do ComboBoxu řádek (seznam posledních 10 řádků) z výše uvedeného souboru
	CmbPosledniPrikazy.Items.Add(VarCteniPosledniPrikazy.ReadLine)
	CmbPosledniPrikazy.SelectedIndex = 0
	VarCteniPosledniPrikazy.Close()
    End Sub

    Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
	Dim VarCteniDavky As New IO.StreamWriter("\Files\Davka.txt", True, System.Text.Encoding.GetEncoding("windows-1250"))
	VarCteniDavky.Write(RtbDavka.Text)
	VarCteniDavky.Close()
	Dim VarCteniHistoriePrikazu As New IO.StreamWriter("\Files\HistoriePrikazu.txt", True, System.Text.Encoding.GetEncoding("windows-1250"))
	VarCteniHistoriePrikazu.Write(RtbHistoriePrikazu.Text)
	VarCteniHistoriePrikazu.Close()
	Dim VarCteniLogu As New IO.StreamWriter("\Files\Log.txt", True, System.Text.Encoding.GetEncoding("windows-1250"))
	VarCteniLogu.Write(RtbLog.Text)
	VarCteniLogu.Close()
	Dim VarCteniPosledniPrikazy As New IO.StreamWriter("\Files\PosledniPrikazy.txt", True, System.Text.Encoding.GetEncoding("windows-1250"))
	VarCteniPosledniPrikazy.Close()
    End Sub
End class
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už to čtu podruhé a stále nemám představu, co se má vlastně dělat, nejspíš nějak sloučit soubory.

Načítáte jenom jeden řádek ReadLine, nechybí tam cyklus nebo množné číslo ReadLines ...

Vzorek souboru z předchozího vlákna s nyní zde oblíbeným comboboxem:

Číslo;Název;Popis
1;Položka1;Popis1
2;Položka2;Popis2
3;Položka3;Popis3
4;Položka4;Popis4
5;Položka5;Popis5
6;Položka6;Popis6
7;Položka7;Popis7
8;Položka8;Popis8
9;Položka9;Popis9

Na formulář si, prozměnu, vložíme dva listboxy a tlačítko, v jeho události

při kliknutí do listboxů vybereme určený počet prvních a posledních položek:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim file_path = "C:\ComboLovers\Seznam.txt"

        Dim header As Boolean = True, c As Integer = 3
        Dim all_lines As List(Of String) = System.IO.File.ReadLines(file_path, System.Text.Encoding.GetEncoding("windows-1250")).Skip(IIf(header, 1, 0)).ToList
        Dim first_c As List(Of String) = all_lines.Take(c).ToList
        Dim last_c As List(Of String) = all_lines.Skip(IIf(all_lines.Count > c, all_lines.Count - c, 0)).ToList

        ListBox1.DataSource = first_c
        ListBox2.DataSource = last_c
    End Sub

Mělo být prvních deset nebo posledních? Zde jsou jen tři. (Husek, Žižka a Jirásko) :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpověd a za radu.

Načtení celého seznamu se mi už podařilo, jenže se mi načte celý seznam a ne jen prvních 10 položek, jak jsem chtěl a nastavit ve vlastnostech nebo přímo v kodu MaxDropDownItems = 10 nepomáhá. :-(

Se mi zobrazí celý seznam, ale já to v ComboBoxu potřebuji očesat na zobrazení jen prvních 10 řádků z celého seznamu a zbytek aby ComboBox ignoroval a to mi nejde. :-(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vlastnost MaxDropDownItems slouží k nastavení kolik položek má být vidět v rozevírací části comboboxu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém je v tom, že i když si nastavím Max na 10, tak stejně vidím v rozbalovacím okně všechny dostupné. :-(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

MaxDropDownItems na počet items v comboboxu nemá vliv, je to počet zobrazených v rozevírací části, je-li jich víc než zobrazených, zobrazí se posuvník. Nastavte MaxDropDownItems=5 a rozevírací část změní svoji velikost pro zobrazení pěti položek najednou...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback