Ocislovanie textu v RichTextBoxe   zodpovězená otázka

VB.NET, WinForms

Tazka znova ja uz vyzeram ako nejaky spamer ale ked si neviem dat rady...

Idem rovno k veci ako uz z nazvu vyplyva potrebujem ocislovat text v richtextboxe. To znamena ze pred kazdy riadok textu potrebujem vlozit napr. 1. dalsi riadok bude 2. 3. 4. 5... atd. chcem aby cisla vlozil do vsetkych riadkov ktore su v richtextbox-e.

Program na cislovanie suborov viem spravit a mam ho spraveny. Text zo suboru citam funkciou StreaReader a zapisujem ho pomocou StreamWriten vsetko funguje ako ma ale v mojom novom projekte(CNC editor) chcem riadkovat priamo text v richetextboxe a neviem ake funkcie na to pouzit.

Ako precitat cely text do premennej ako ho potom zapisat spat?

Dakujem

dodo

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

Nevím, jestli Vám to pomůže, ale pokud budete mít každý řádek v buňce pole s názvem pole a prázdný RTB, pak můžete použít:

 For i As Integer = 0 To pole.Length - 1
        RichTextBox1.Text = RichTextBox1.Text & Chr(13) & (i + 1) & ". " & pole(i)
 Next
 RichTextBox1.Text = RichTextBox1.Text.Substring(1)

Chr(13) odřádkovává, pokud tam jsou chyby, opravte mě prosím.

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

Dakujem za pomoc

Cyklus poznam dokazem vlozit do richtextboxu presne to co potrebujem lenze este zopar podmienok mi tam chyba.

Moj kod:

Dim i As Integer
        Dim b As Integer

        For i = 0 To 100

            RichTextBox1.Text = RichTextBox1.Text & "N" & b & Chr(13)
            b += NumericUpDown1.Value
        Next i

Toto je jednoduchy kod na naplnenie richtextboxu "N a zvysujuce sa cislo" lenze teraz potrebujem to aby moj cyklus dokazal nacitat cely text do pola pole musi byt Dynamicke kedze neviem aky je text dlhy... Potom potrebujem aby mi kazdy riadok z pola precitalo a znova ho vlozilo do richtextboxu aj s cislom pred riadkom (N1),(N2) atd. lenze toto akosi neviem napisat :( uz sa s tym babrem dva dni a vysledok nulovy.

Za dalsie napady budem vdacny.

dodo

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

Mozno pomoze nieco takeho :)

        Dim str As New System.Collections.ArrayList
        For i As Integer = 0 To RichTextBox1.Lines.Length - 1
            str.Add("<" & i & "> " & RichTextBox1.Lines(i))
        Next
        RichTextBox1.Clear()
        For i As Integer = 0 To str.Count - 1
            RichTextBox1.Text &= str(i) & Chr(13)
        Next

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

Dakujem toto vyzera super presne tuto funkciu na citanie jednotlivych riadkov som hladal.

Este raz dik

dodo

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

Rado sa stalo.

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

Este to testujem naozaj to robi to co ma ALE :)

Ked chcem oriadkovat velky subor napr. 1.3MB tak mi to aplikacia nezvladne a robi to velmi dlho dala by sa vyzit nejaka ina funkcia ako napriklad popisuje kolega nizsie na pracu s vacsimi subormi?

Dakujem

dodo

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

Dobrý den,

řešení je jako vždy několik, rozhodující je, s jakou proměnnou chcete pracovat (a to je nutné hodnotit zejména z hlediska velikosti zpracovávaných souborů a funkcionality, kterou má aplikace realizovat). V úvahu připadají např.:

a) řetězec (triviální realizace, snadná implementace funkcí typu paste/cut, horší při raálných odezvách s většími soubory)

b) nějaký vhodný typ kolekce či vlastní implementace zřetězeného seznamu (poněkud obtížnější realizace, možné dlouhé soubory a přitom velice rychlé zpracování)

c) pole řetězců (obdoba b, ale značná časová náročnost při vkládání řádků,...)

A ještě poznámka - co když uživatel při editaci smaže číslo řádku?

ad a)

Dim s as string
s=mujBox.text
Dim i as integer =0 'např.: pozor! omezení velikosti!!

a cyklus na rozebrání a složení bude vycházet z příkladu na konci tohoto příspěvku (jen se to nebude strkat do pole, ale do řetězce + to zmíněné číslování)

Dim cil as sring=""
Dim j as integer=0
Dim k as integer
do while s.indexof(vbcr,j)>-1
  k=s.indexof(vbcr,j)
  cil+=i & ": " & s.substring(j,k-j)
  i++
  j=k
loop
cil+=i & ": "s.substring(j)
mujBox.text=s 'a samozřejmě, že by to šlo i bez těch pomocných stringových proměnných, jenže takhle je to čitelnější...

ad b)

lze použít již existující kolekce nebo si vytvořit vlastní objekt zřetězeného seznamu (tj. objekt, který má hodnotu /tj. řádek, který Vás ve výpisu zajímá/, ukazuje na sobě předcházející objekt /řádek/ a po něm následující objekt). Výhoda je zřejmá - při listování, vkládání apod stačí jen projít potřebný počet záznamů, upravit případně odkazy...=> rychlost a přitom žádné omezení velikostí řetězce,...

ad c)velmi zlehka nastřeleno:

nejprve naplnění ze souboru:

Dim a(1) as string
Dim i as integer =0 'např... pozor! omezení velikosti!!
Dim st as streamRider("c:\bla.txt") 'obdobně lze i z jiných zdrojů, občas je ale nutno dělit řádky (tj. hledat vbcr nebo vbcrlf)
mujBox.text=""
do while not st.endofstream
  a(i)=st.readLine
  i++
  ReDim persistent A(i)
  mujBox.text=i & ": " & a(i-1)
loop
st.close

'rozdělení řádků (bude to nutné trochu testovat na začátek a konec řádku, poslední řádek a pod... Prostě práce s indexy:-))):

Dim a(1) as string
Dim i as integer =0 'např... pozor! omezení velikosti!!
Dim s as string 'toto je "zdroj" s nedělenými řádky...
Dim j as integer=0
Dim k as integer
do while s.indexof(vbcr,j)>-1
  k=s.indexof(vbcr,j)
  a(i)=s.substring(j,k-j)
  i++
  ReDim persistent A(i)
  j=k
loop
a(i)=s.substring(j)

Snad v tom není moc chyb a překlepů :-)))

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