Obsługa plików z formatami w C#

Obsługa plików z formatami w C#
N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

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.

edytowany 1x, ostatnio: nikki15
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
1

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.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

Dzięki za szybką odpowiedź. A czy mógłbyś polecić kilka takich bibliotek? To sobie przejrzę co one potrafią i co mi się przyda :)

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

Możesz użyć RichTextBox z Windows Forms.

N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

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:

Kopiuj
 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?

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

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.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
somekind
Czyli richTextBox.SelectedText = richTextBox.SelectedText.ToUpper();
N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

Witam ponownie :) dzięki za podpowiedzi. Trochę nad tym siedziałam, ale to rozpracowałam, faktycznie RichTextBox to wprost idealne narzędzie do tego typu problemu. Pozdrawiam

N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

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:

Kopiuj
 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

Kopiuj
 FontStyle.Italic

Gmatwam się natomiast jak czcionka już była pogrubiona i chcę dodać kursywę. Jak to osiągnąć?

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:14 minut
  • Postów:6687
1

FontStyle.Bold | FontStyle.Italic

Nie używam C#, ale... http://bit.ly/Y6qmPo


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

Dzięki :) ja używałam && i nie chciało przejść ;) teraz działa

edytowany 1x, ostatnio: nikki15
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:14 minut
  • Postów:6687
2

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.


🕹️⌨️🖥️🖱️🎮
N1
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:24
0

Dzięki za pomoc i wyjaśnienie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.