vbTab v RichTextBoxe   zodpovězená otázka

VB.NET

Dobrý večer. Mohol by mi niekto, prosím, vysvetliť ako funguje vbTab v RichTextBoxe?

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

Hlavne mi ide o to, ako sa dá nastaviť pre vbTab veľkosť odsadenia

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

vbTab je konstanta, která reprezentuje znak chr(9), tj. znak tabulátoru a ten je všude, tedy i v RichTextBoxu vždy stejný. Vzdálenost, o kterou se odsune text, je dána nastavením zarážky tabulátoru...

Nejspíš to pro Vás není novinka a vím, že Vám to v řešení problému nepomůže. Opět mi však napadá, že jdete příliš trnitou cestou a že RichTextBox těžko naučíte, co neumí. Zvládnout celou syntaxi RTF není jistě jednoduché. Stále si myslím, že bude jiná cesta, třeba načtení některé knihovny MS Office, nebo pracovat rovnou s nebo ve Wordu...

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

Tady je malý příklad zarážek tabulátoru nastavených po 1 cm (syntaxe RTF s pomocí WorPadu):

	Public Class Form1
	  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
	    RichTextBox1.Rtf = ""
	    RichTextBox1.Text &= "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset238{\*\fname Microsoft Sans Serif;}Verdana;}}" & vbCrLf
	    RichTextBox1.Text &= "\viewkind4\uc1\pard\lang1029\f0\fs17 \tx568\tx1136\tx1704\tx2272\tx2840\tx3408\f0\fs20 a\tab b\tab c\tab d\tab e\tab f\tab g\tab\par" & vbCrLf
	    RichTextBox1.Text &= "}" & vbCrLf
	    RichTextBox1.Rtf = RichTextBox1.Text
	    RichTextBox1.SaveFile("C:\Soubor.rtf", RichTextBoxStreamType.RichText)
	  End Sub
	End Class

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tabulátor můžete nastavit i přímo v Richtextboxu:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   ' nastavím jadnotlivé tabulátory (v pixelech, jedná se o absolutní hodnoty
   ' tedy vše měřeno od začátku řádku
   Dim abc() As Integer = {150, 300, 450}
   ' vyberu "vše" v RTB, protože další příkaz modifikuje výběr
   ' nevadí, že tam nic nemám
   Me.RichTextBox1.SelectAll()
   ' nastavím pro výběr hodnoty tabulátorů
   Me.RichTextBox1.SelectionTabs() = abc
 
   ' toto jenom proto, abych mohl používat tabulátor i z klávesnice při psaní do RTB,
   ' jinak by nám to skočilo na dalčí controll
   Me.RichTextBox1.AcceptsTab = True

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   ' a zkusíme si něco vypsat
   Me.RichTextBox1.Text = "1" & vbTab & "2" & vbTab & "3" & vbTab & "4"
    End Sub
End Class

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Mimochodom z klávesnice treba stlačiť CTRL + TAB

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

S tím Ctrl+Tab to platí obecně, pokud ale Richtextboxu nastavíte to Akcepttabs, tak to funguje i bez toho Ctrl, proto jsem to tam uváděl.

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

To je mi jasné. Táto poznámka bola pre okoloidúcich.

Vďaka.

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

Výborne Viktor! Trápim sa s tým dva dni a to .selectAll() ma vôbec nenapadlo. Tým pádom si viem vytoriť potrebný voľný priestor na začiatku riadka aj kdekoľvek v texte v RTB.

Príma!

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

Jako obyčejně jste problém vyřešil! Jak to děláte? Co všechno ten RichTextBox ještě dovede? Počáteční optimismus jsem ztratil, Vy mi dodáváte nový.

Přišel jsem však na to, že příkazy zadané ve sledu Vašeho příkladu u mne nefungují. Zarážky se nenastavují (vůbec se nezapisují) a odstup textu je s jakýmikoliv hodnotami v poli abc() stále stejný, defaultní.

Příkazy Select a SelectionTabs jsem dal až za vložení textu s vbtab a tak to jde. "SelectionTabs" asi napovídá proč.

Pod tlačítko jsem dal:

  Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    ' a zkusíme si něco vypsat
    Dim abc() As Integer = {100, 200, 300, 400, 600, 900, 1200}
    Me.RichTextBox1.SelectionTabs = abc
    'Me.RichTextBox1.Invalidate()
    Me.RichTextBox1.Text = "1" & vbTab & "2" & vbTab & "3" & _
         vbTab & "4" & vbTab & "5" & vbTab & "6" & vbTab & "7"
    Me.RichTextBox1.SelectAll()
    Me.RichTextBox1.SelectionTabs = abc
    RichTextBox1.SaveFile("C:\Soubor.rtf", RichTextBoxStreamType.RichText)
  End Sub

Výsledky pokusů lze vidět v syntaxi RTF, když Soubor.rtf otevřu v Poznámkovém bloku, a zarážky tabulátoru pak vidím na pravítku ve WordPadu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ale ani Vám nevím. Vždy když někdo s nějakým "ne až tak extrémně složitým" problémem příjde, tak si otevřu VB a zkouším, a hlavně, jako v tomto příkladu, koukám do seznamu funkcí, případně nápovědy.

Je pravdou, že jsem po posledních pokusech s RTB šel podobnou cestou, jakou jste naznačil Vy, tedy kouknul jsem se dovnitř RTF formátu - měl jsem pro kolegu již téměř připravený postup jak nastavit zcela přesné odsazení (že by se do textu vkládal prázdný obrázek s 1 pixelovou výškou a délkou dle potřebného odsazení), i na tabulátor jsem se tenkrát díval, ale mé první pokusy s manipulací s ním skončily nezdarem, tak jsem se věnoval své linii s obrázkem.

Jenomže pak přišel dotaz právě na ten tabulátor, tak jsem se na něj znovu kouknul, no a ejhel, když jsem poricházem u RTB intellisense, nemohl jsem si (přes svou neznalost angličtiny) nevšimnout příkazu, který se tabulátorem zabýval.

No a po několika pokusech, kdy to nechodilo, jsem se zaměřil na to, že v názvu se objevuje "selection", což už bylo ke konečnému češení skutečně jenom kousek.

No a touto metodou jsem přišel na převážnou většinu "rad" kterými tady na tomto fóru své kolegy častuju - tedy ne, že bych toho tolik věděl (vždyť jsem opravdu totální začátečník), ale podařilo se mi to někde nalézt, případně metodou pokus-omyl otestovat.

Jenom pro pořádek- třeba RichTextBox jsem v životě ještě nepotřeboval, a než jsme se jím na těchto stránkách začali zabývat, ani jednou jsem ho neměl na Formu ještě plácnutý,:-)

Jo a k tomu příkladu, nevím, jak je to možné, ale pokud si Váš kód upravím do podoby odpovídající schematu mého předchozího příspěvku:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' a zkusíme si něco vypsat
  Dim abc() As Integer = {100, 200, 300, 400, 600, 900, 1200}
  Me.RichTextBox1.SelectAll()
  Me.RichTextBox1.SelectionTabs = abc
  'Me.RichTextBox1.Invalidate()
  Me.RichTextBox1.Text = "1" & vbTab & "2" & vbTab & "3" & _
             vbTab & "4" & vbTab & "5" & vbTab & "6" & vbTab & "7"
  'Me.RichTextBox1.SelectAll()
  'Me.RichTextBox1.SelectionTabs = abc
  RichTextBox1.SaveFile("C:\Soubor.rtf", RichTextBoxStreamType.RichText)
End Sub

dostanu úplně stejný výsledek (v RichTextBoxu, v souboru i po otevření souboru v Wordpadu), jako při spuštění Vašeho kódu přímo bez úprav. Takže netuším, proč Vám to nefunguje.

Pěkný den.

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

Ďakujem, páni. Otázka síce nebola najpresnejšia, ale odpovede sú úplne presné.

Príjemný večer.

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

Dobrý večer!

Tešil som sa predčasne.

Ak som mal predtým problém so začiatkom riadku, tak teraz mám s koncom. Vo Worde, ak nastavím tabelátor na koniec riadka a dám odsadiť text s tým, že kurzor je o medzeru pred slovom, tak medzera zostane v aktuálnom riadku a slovo sa presunie na ďalší riadok. Výborne... Skúste, čo robí WordPad. Nechápem!

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

Je to možné, žeby som nevedel naprogramovať, čo Word 2003! bez problémov zvláda.

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