Witam. Piszę prosty program do obsługi i formatowania plików tekstowych, taki bardzo uproszczony Word. Dodam, że jest to mój pierwszy program w języku C#. Poprzez formatowanie rozumiem proste operacje na fragmencie tekstu, tj. zmiana rozmiaru, koloru, pogrubienie, pochylenie itp. Program ma umieć wczytywać plik, sformatować tekst i zapisać go z formatem. Nie pytam tu o sam fakt operacji na plikach, tylko jak rozwiązać zapamiętanie formatu? Pierwszy (choć nie wiem czy dobry) pomysł był taki, że jak np. chcę pogrubić fragment tekstu, to de'facto obudowuję go znacznikami, np znanymi z html < b > ... < /b >. Tylko jak to zrobić, żeby był widoczny efekt, a nie znaczniki? Jakiego rozszerzenia pliki polecacie do rozwiązania tego problemu? Pliki *.txt oczywiście odpadają co się rozumie samo przez się, zastanawiam się tylko, czy bazować tu np. na *.rtf czy może zaimplementować jakieś własne rozszerzenie? Z góry dziękuję za wszelkie porady.

- Rejestracja:ponad 14 lat
- Ostatnio:ponad 5 lat
- Lokalizacja:Kosmos
- Postów:1571
Myślę, że RTF Ci starczy i nie ma sensu wprowadzać nowego formatu i pisać do niego silnika. Chyba, że masz zamiar się trochę pobawić to owszem, możesz spróbować. A do RTF istnieje dużo bibliotek, które pozwolą Ci obsłużyć ten format.
- Rejestracja:około 12 lat
- Ostatnio:ponad 10 lat
- Postów:24
co zrobić, żeby po zaznaczeniu odpowiedniego fragmentu tekstu i naciśnięciu przycisku odpowiadającego za pogrubienie, zdarzenie zostało obsłużone? Tak jak w wordzie - możemy zaznaczyć tekst i użyć skrótu ctrl+B albo wcisnąć przycisk mając zaznaczony tekst. Mamy tu do czynienia ze zdarzeniem w zdarzeniu - zdarzeniem "zewnętrznym" jest zaznaczenie tekstu, a zdarzeniem "wewnętrznym" jest kliknięcie w przycisk. Jak to ogarnąć? I jeszcze jedno. Przeglądając klasę RichTextBox chciałam na start zrobić cokolwiek na zaznaczonym tekście. Użyłam więc metody:
private void poleTekstowe_SelectionChanged(object sender, EventArgs e)
{
((RichTextBox)sender).SelectedText.ToUpper();
}
która wydaje mi się, że powinna zaznaczony ciąg znaków przerobić na duże litery, jednak tak się nie dzieje. Dlaczego?

- Rejestracja:ponad 14 lat
- Ostatnio:ponad 5 lat
- Lokalizacja:Kosmos
- Postów:1571
Tak, to są 2 zdarzenia, ale myślę, że wystarczy w zdarzeniu przycisku pogrubić czcionkę, po prostu użyć właściwości i zwyczajnie pogrubić. Drugie zdarzenie SelectionChanged nie jest tu potrzebne. I Wydaje mi się, że źle robisz zmienianie na duże litery. SelectedText zwraca tylko zaznaczony tekst w formie stringu. Nic tym nie zrobisz. Musisz przypisać nowy string, który jest już zamieniony na duże litery.
- Rejestracja:około 12 lat
- Ostatnio:ponad 10 lat
- Postów:24
Mam jeszcze jedno pytanie odnośnie tego tematu. Jak ręcznie (kodowo) ustawić, żeby czcionka była jednocześnie np pogrubiona i pochylona?
Samo pogrubienie ustawiam tak:
private void pogrubienie_przycisk_Click(object sender, EventArgs e)
{
if (poleTekstowe.SelectionFont.Style == FontStyle.Bold)
poleTekstowe.SelectionFont = new Font(poleTekstowe.SelectionFont.FontFamily,
poleTekstowe.SelectionFont.Size, FontStyle.Regular);
else
poleTekstowe.SelectionFont = new Font(poleTekstowe.SelectionFont.FontFamily,
poleTekstowe.SelectionFont.Size, FontStyle.Bold);
}
z kursywą jest analogicznie tylko ustawiam
FontStyle.Italic
Gmatwam się natomiast jak czcionka już była pogrubiona i chcę dodać kursywę. Jak to osiągnąć?

- Rejestracja:około 22 lata
- Ostatnio:4 minuty
- Postów:6656
FontStyle.Bold | FontStyle.Italic
Nie używam C#, ale... http://bit.ly/Y6qmPo

- Rejestracja:około 22 lata
- Ostatnio:4 minuty
- Postów:6656
A wiesz dlaczego nie łączy się tych wartości logicznym ANDem, tylko robi się to bitowym ORem?
Załóżmy, że identyfikator Italic to (dwójkowo) 0001, a identyfikator Bold to 0010, jak zrobisz nawet bitowego AND, to otrzymasz 0000, jak zrobisz bitowego OR, to otrzymasz 0011, zaś jak zrobisz logicznego ANDa, to otrzymasz prawdopodobnie True, bo obie liczby są różne od 0 i ich wartość logiczna to True.
richTextBox.SelectedText = richTextBox.SelectedText.ToUpper();