Obiekt RichtextBox : dodawanie tekstu + kolorowanie tekstu.

0

Hai.
Mam taki problem. zrobiłem sobie menu kontekstowe, i mam tam przycisk "Alias"
chciałem żeby on dodawał do Obiektu 'RichTextBox", o etykiecie "PoleTekstowe" dany tekst, mianowicie taki:

;alias "x" ";"

więc dałem taki kod:

private: System::Void aliasToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
		 {
			 PoleTekstowe->Text += "\n;alias \"x \" \" ;\" ";
			 PoleTekstowe->Modified = true;
		 }

niestety po naciśnięciu tego przycisku dodaje mi ten tekst, lecz jest On dodawany na końcu PolaTekstowego, a ja bym chciał żeby się dodawał tam gdzie jest kursor.
Chodzi mi o to, żeby po naciśnięciu tego, tak jakby został wklejony tekst, w miejscu kursora, np. w środku tekstu.
Czy zna ktoś inny sposób, który rozwiązałby ten problem?

A i jeszcze jedno chciałbym żeby np. na kolor zielony mi zaznaczało wszystkie słowa alias, jak to zrobić?

0

PoleTekstowe->SelectedText = "\n;alias "x " " ;" ";

0

adf88 dziękuje bardzo. :)

A i jeszcze jedno chciałbym żeby np. na kolor zielony mi zaznaczało wszystkie słowa alias, jak to zrobić?

A to ktoś wie?

A jak bym np. chcial wkleić w dane miejsce? np. po słowie "Nigga"??
Wytłumaczył by ktoś?

0

Wszystkie twoje pytania dotyczą zaznaczenia - Selection. Odpowiednio nim manipuluj aby wstawiać tekst w wybrane miejsce czy formatować wybrany fragment.

Żeby pokolorować jakieś słowo to musisz:
1 wyszukać je (String.IndexOf)
2 zaznaczyć (RitchTextBox.Select)
3 pokolorować zaznaczenie (RichTextBox.SelectionBackColor)

Żeby wstawić coś za jakimś słowem musisz wyszukać je, umieścić zaznaczenie za nim (zaznaczenie o zerowej długości) i wstawić tekst za pomocą SelectedText.

Przeglądnij wszystkie pola klasy RichTextBox które zaczynają się od "Select..." !

0
adf88 napisał(a)

Wszystkie twoje pytania dotyczą zaznaczenia - Selection. Odpowiednio nim manipuluj aby wstawiać tekst w wybrane miejsce czy formatować wybrany fragment.

Żeby pokolorować jakieś słowo to musisz:
1 wyszukać je (String.IndexOf)
2 zaznaczyć (RitchTextBox.Select)
3 pokolorować zaznaczenie (RichTextBox.SelectionBackColor)

Żeby wstawić coś za jakimś słowem musisz wyszukać je, umieścić zaznaczenie za nim (zaznaczenie o zerowej długości) i wstawić tekst za pomocą SelectedText.

Przeglądnij wszystkie pola klasy RichTextBox które zaczynają się od "Select..." !

1 wyszukać je (String.IndexOf)

Niestety tego słowa, a raczej funkcji nie mogłem znaleźć, więc zastąpiłem ją find, może mógłbyś to wytłumaczyć?

Dałem coś takiego:

				 PoleTekstowe->Select(PoleTekstowe->Find("Config"),6);
				 PoleTekstowe->SelectionBackColor(Color::BlueViolet);

Tekst mi zaznacza, ale przy drugiej lini wyskakuje mi błąd, starałem się go rozwiązać, ale nie mogę. :<

Błąd:

1>c:\documents and settings\koldy~\moje dokumenty\visual studio 2008\projects\csce\counter-strike config editor\Form1.h(868) : error C2064: term does not evaluate to a function taking 1 arguments

Jakieś rady?

0
.KoLdY napisał(a)

Jakieś rady?
http://msdn.microsoft.com -> Search -> "RichTexBox.SelectionBackColor"

0
adf88 napisał(a)
.KoLdY napisał(a)

Jakieś rady?
http://msdn.microsoft.com -> Search -> "RichTexBox.SelectionBackColor"

Zanim napisałem przeszukałem.
http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.selectionbackcolor(VS.80).aspx
Ale dalej nie wiem, value jest dobrze podane, a wyskakuje błąd, nie mam pojęcia dlaczego.

0

adf88, dziękuje Ci bardzo to wyjaśniło mi wszystko wiem już jaki błąd popełniłem.
Ale jednak teraz chciałbym się jeszcze spytać coś, ponieważ koloruje mi, ale nie tak jak bym chciał.

np.

int zmienna

właśnie coś takiego chce osiągnąć, że słowo int jest niebieskie po napisaniu go, a zmienna jest normalna, ale nie wiem jak zrobić by zaznaczyło mi wszystkie słowa np. 'int' poparzez wyszukiwanie find, nie można tego zrobić ponieważ zaznacza mi jedno, oraz zostaje zaznaczenie, wiem, że można zrobić:

PoleTekstowe->DeselectAll();

Ale może jest jakaś prostsza metoda, która by to zrobiła?

0

W pętelce wyszukuj kolejne słowa, aż pokolorujesz wszystkie. Nie musisz odznaczać, wystarczy że za każdym razem zaznaczysz znalezione słowo metodą Select. Do szukania użyj bardziej rozbudowanego RichTextBox.Find.
Ta metoda pozwala sprecyzować od którego znaku zacząć wyszukiwanie (zaczynaj za ostatnio znalezionym słowem). Metoda również dostarcza kilku przydatnych opcji, tobie może przydać się RichTextBoxFinds.MatchCase i RichTextBoxFinds.WholeWord.

0

Nie wiem, próbowałem już wszystkiego. Nie wiem czy ta klasa: RichTextBoxFinds wymaga jakiegoś include, czy co bo nie mam takiej, wyskakuje że nie znane. :<

0
richTextBox1.Find(..., RichTextBoxFinds::MatchCase | RichTextBoxFinds::WholeWord);
0

.KoLdY - naucz sie zakladac NOWE tematy dla NOWYCH spraw: http://4programmers.net/Forum/viewtopic.php?id=139874

0

adf88: Próbowałem wszystkiego:
for, while, czytałem z 10razy cały topic, szukałem w mdns i nic.

Zawsze efekt jest taki sam:
mianowicie, kiedy napisze już to dane słowo, w moim przypadku ";alias", zaznacza mi pierwsze słowo, reszte już nie, na dodatek, nie mogę już nic pisać w obiekcie RichTextBox, ponieważ dam jakiś znak i już mam zaznaczone słowo ;alias ( to pierwsze).

Użyłem funkcji: RichTextBox_TextChanged()
i za każdym razem jak coś napisze to mam zaznaczone to słowo.. :<

Przypomne moim zamierzeniem jest zaznaczanie tak jak w kompilatorze słów kluczowych (kompilator: int, double, do, if, else, itp. | mój program: bind, alias.)

Zna ktoś jakiś sposób, żeby pisało się tak samo jak w kompilatorze, czyli bez żadnych dodatkowych odkliknięć, bez widoku zaznaczanego tekstu, itp?
Po prostu żeby ktoś napisał:

alias "ejj"
i mu zaznaczyło alias na niebiesko.

Mnie się pomysły skończyły.

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