tabControl bez zmiany tabpage

tabControl bez zmiany tabpage
0

Witam. Chcę osiągnąc funkcjonalność podobną do tabControl z tym , że nie chce żeby zmiana tabPage powodowała wytworzenie osobnego okna z kontrolkami. Chce mieć jeden tabpage i kilka przyciskow na tabcontrol ,gdzie zmiana przycisku (przeskakiwanie pomiędzy tabami) wywoła mi funkcja na jednym oknie, zamiast przekskaiwac pomiedzy tabpagami.
Probowalem troche overridow , zdarzen ale chyba nie da sie tego zrobic na windowsowskiej kontrolce.

Wymagania :

  • Przyciski a'la tabcontrol
  • jeden tabpage (obszar roboczy z kontrolkami)
  • zmiana tabpage nie zmienia okna z kontrolkami
  • zmiana tabpage sprawia ze przyciski wygladaja na "wcisniete" i wywoluje mi zdarzenie

Znacie jakis workaround albo custom control?

quetzalcoatl
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 6 lat
0

um..
wez usercontrol
poloz gdzies w szeregu np. na gorze NIE przyciski, a RadioButton(!) z ustawionym Appearance=Button(!!)
pod przyciskami poloz "panel" "P", duzy, zajmujacy reszte miejsca
wszystkiemu visible=true

na panelu "P" umiesc inny panel, "A", poukladaj na nim zawartosc storny pierwszej, daj panelowi Visible=false
na panelu "P" umiesc inny panel, "B", poukladaj na nim zawartosc storny drugiej, daj panelowi Visible=false
...

teraz podpnij sie pod Checked w radiobuttonach, i w danym radiobuttonie od strony piewszej:
B.Visible = false
C.Visible = false
D.Visible = false
...
Z.Visible = false
A.visible = true
teraz podpnij sie pod Checked w radiobuttonach, i w danym radiobuttonie od strony drugiej:
A.Visible = false
C.Visible = false
D.Visible = false
...
Z.Visible = false
B.Visible = true
itp

"i juz" masz swoj tabcontrol.. brzydki.. ale mozesz robic z nim i go przestawiac ile Ci sie podoba.
a jeszcze sobie to wszystko uproscisz jak zgromadzisz wszystkie panele "A" "B"..."Z" w tablicy/liscie i zaczniesz operowac na idei "selected index", nadasz radiobuttonom wartosci odpowiadajace, i potem wszystkim radio dasz jeden ten sam handler ktory w petli przeleci po liscie i poprzelacza wszystko

  • serio, radze dac podwojny panel, z tego powodu, ze mozesz chciec czasem cos "recznie" dostrzelic do "obszaru roboczego" i wtedy posiadanie "panelu-obszaru roboczego" jest wygodniejsze niz pamietanie, ze obszar roboczy lezy 5pixów ponizesz przycisków. Z drugiej mańki "strony" tez dobrze aby byly pogrupowane w panele i byly dziecmi obszaru roboczego, aby przelaczanie Visibility bylo maksymalnie proste i "jednokrokowe", na wypadek gdybys mial miec na stronie 50 kontrolek.. wtedy iterowanie po nich i wylaczanie im kolejno visibility jest dosc nieladne wizualnie

no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał
edytowany 2x, ostatnio: quetzalcoatl
massther
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 9 lat
0

Coś mi się zdaje że @disease chce jakoś modyfikować tylko część kontrolek po "przejściu na inny tab" = wciśnięciu "przycisku taba".
Jak napisał quetzalcoatl jeśli jakieś grupy kontrolek, które tworzą jakąś logiczną całość wydzielisz do UserControl, to będziesz mógł łatwo pokazywać/ukrywać odpowiednie części interfejsu.

0

No tak , dzięki , ale

  • napisales ze mam stworzyc kilka paneli , ja chce 1 (jeden glowny , przeskakiwanie pomiedzy przyciskami wywola mi funkcje na jednym gridView, nie chce tworzyc kilku gridView dla kazdego taba) - spoko da sie zrobic tym sposobem ktory podales ale:

  • ja chce generowac w runtime kolejne przyciski na bazie user input. Wiec tabów moze byc kilkadziesiat nawet, a wiec dochodzi zarządzanie nimi w przypadku gdy wychodza za ekran. Niestety tabcontrol to zalatwi ale radiobutton juz nie.

Bartosz Wójcik
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:439
0

Natywna kontrolka tab właśnie tak działa jak opisałeś (to użytkownik jest zobligowany do wyświetlania osobnych dialogów na zmianę tab-a)! :) tylko wszystkie wrappery to ładnie oplatają w tabpage'a dla wygody ;)

0

Nieco inaczej : W tym momencie wkladam tabcontrol na forma. mam standardowo 2 tabPage : tabPage1 i tabPage2. W standardzie jest wcisniety tabPage1. Przycisniecie przycisku reprezentujacego tabPage2 powoduje przejscie na tabPage2 (:P) Ja chce zeby on został na tabPage1, wywolal zdarzenie (powiedzmy tabPageIndexChanged) , wcisnal tabPage2 (wizualnie przycisk) i to wszystko , bez przeskakiwania na tabPage2. Takie troche MDI tylko ze z jednym formem.

0

@Bartosz
Wlasnie problem w tym ze nie da sie zablokowac przeskakiwania na tab2 , nie ma zdarzenia PRZED tabIndexChanged, nie ma zadnego tabIndexChanging, nie mozna dac e.Cancel.

Bartosz Wójcik
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:439
0

Zrób sobie natywną (a nie .NET-ową wersję) tab-a, przykład tworzenia natywnych kontrolek z C# http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.aspx

quetzalcoatl
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 6 lat
0

@Bartosz - wiesz, to już lekki overkill mu zalecasz.. nie przesadzajmy.. on to samo moze osiagnac zwyklym badziewnym UserControl'em, a jelsli to spali to wciaz moze to napisac calkiem prosto w samym C#/.Net dziedziczac po Control albo Panel. Do native'a nie schodzi sie po takie proste rzeczy.. Ok, chyba ze uda mu sie native-gotowca na to znalezc..

@disease
ale za to, mozesz TabPage2 ukryc, albo zrobic chamski test na selectedindexchanged w ktorym sprawdzisz :czy juz mozna: i jezeli nie mozna, to ustawisz selectedindex z powrotem na stary i walniesz msgboxa z informacja ze "nie skonczyles z poprzednia strona"..

btw. to co Ci napisalem to nie byl gotowiec, tylko idea, jak to rozwiazac. jesli nie chcesz tabcontrol, to doszlifuj sobie to co napisalem do swoich potrzeb i juz.. co do dynamicznego tworzenia tresci, to co za problem czy dynamicznie tworzysz nowe kontorlki na oknie czy na nazwanym pod-panelu?

btw. poza tym, kurcze, co Ty wlasciwie chcesz? napisales wtedy ze chcesz tabpage ale bez przelaczania "okien", a teraz piszesz ze chcesz miec przyciski ala tab na gorze, ktore dadza sie wcisnac, ale "i to wszystko" ?? to co one maja robic? nic same z siebie nie maja robic? chcesz miec jedynie callback ze ich stan sie zmienil i reszte przelaczania widocznosci kontrolek chcesz robic samemu? to juz Ci napisalem: RadioButton+Appearance=Button "i juz".


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał
edytowany 3x, ostatnio: quetzalcoatl
massther
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 9 lat
0

"chce generowac w runtime kolejne przyciski na bazie user input" - jaki problem? pętla i generujesz do jakiegoś panelu kolejne przyciski, czy dowolne inne kontrolki jakie chcesz. Używasz np. właściwości Tag do dodania tam jakiejś wartości, dzięki której rozpoznasz jaki to przycisk.
Podpinasz wszystkim buttonom na Click metodę obsługi, w której pobierasz Tag sendera i ustalasz co robić dalej.
To była najbardziej prostacka metoda.

Bardziej wyrafinowane rozwiązania, to stworzenie własnej kontrolki, która dostanie listę przycisków do stworzenia, po kliknięciu których będzie generowała ładne zdarzenie.
Lub od razu podpięcia pod przycisk odpowiedniej metody obsługi jego kliknięcia.
Lub dziedziczenie po button (lub innej kontrolce) i rozszerzeniu jej o np. delegat do wywołania po kliknięciu (zaznaczeniu).

Może napisz przykład jakie miałyby być te przyciski, co robić i co dokładnie oznacza "generowac w runtime kolejne przyciski na bazie user input", tzn. masz tylko nazwę przycisku, czy coś jeszcze, bo nie wiem co masz na myśli pisząc "user input"

0

OK.

  1. mam gridView1; gridView1 leży w TabControl (w tej chwili). w tabPage1;
  2. Uzytkownik klika przycisk "Dodaj" , wpisuje jakis tam tekst. Pojawia sie nowy tabPage o nazwie wpisanego tekstu roboczo nazwijmy go tabPage2.
  3. Uzytkownik klika na tabPage2 (przycisk na tabControl zeby mozna bylo sobie wyobrazic, a więc klika nowy tab). W tym momencie gridView1 zmienia dataSource na inna kolekcje, na bazie przycisnietego taba. poza tym nic sie nie zmienia i dalej sie wyswietla gridView1.

Wlasnie wymyslilem ! zrobie tabPage o rozmiarze 0 , bedzie po prostu niewidoczny a zdarzenia sobie bede obslugiwal normalnie :)))) tlumaczac wam sam sie doprowadzilem do rozwiązania :))

1

jasniej : mojego gridView wkładałem do tabPage1. i przy zmianie na tabPage2 znikał. Tego chcialem uniknąć.
Rozwiązanie to postawienie gridView poza tabControl, bezposrednio na formie, okno TabPage ukryc i zostawić widoczne tylko zakładki z przyciskami do zmiany tabów.
Dzięki i pozdrawiam

massther
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 9 lat
0

Trochę na około i amatrosko. Obsługa innego source rozumiem że jest generyczna.
Czyli wyklikam sobie przyciski "Użytkownicy", "Zamówienia", "Faktury", to po kliknięciu jednego z tych przycisków załaduje mi się odpowiednia tabela.
Nie widzę żadnego przeciwskazania, aby dynamicznie generować przysicki i dokładać je do jakiegoś panelu na formie. Po kliknięciu innym przyciskom ustawiam normalny styl, a temu "wciśniętemu" np. zmieniasz kolor (bo żeby zmienić mu styl na wciśnięty to trochę więcej zabawy). Metoda obsługi Click jest jedna i na podstawie nazwy wykonuje select i ładuej dane do grid.

0

ty mowisz o zupelnie innych tabelach na jednym gridzie a to jest amatorsko. Ja poprzez te taby zakladam filtry np przez linq:
this.gridView1.DataSource = collection.Where(x=>x.type == typesEnum.someType); ale tabela z ktorej grid ciagnie dane sie nie zmienia. Dlatego nie chcialem miec kilku gridow.

Generujac dynamicznie buttony jak radzisz powstalby problem gdy przyciskow byloby na tyle duzo ze wychodzilyby za ekran. Nie mowiąc już o manulanej potrzebie rysowania przyciskow kiedy są focused, ustawiania ich położenia względem siebie itp. TabControl takie rzeczy zalatwia dlatego nie chcialem sie wplątywać w jakies buttony czy radio..

massther
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 9 lat
0

"mowisz o zupelnie innych tabelach na jednym gridzie a to jest amatorsko" - zależy, jeśli chcesz mieć generyczny mechanizm wyświetlający dane z dowolnego źródła to nie jest to wcale amatorsko, wręcz przeciwnie, nie wyobrażam sobie tego inaczej, niż stosować jednego grid'a, czy ogólniej kontrolki wyświetlającej dane. Oczywiście źródło może zwracać też metadane precyzujące jak pewne elementy (czy nawet całość) zaprezentować.
Nie napisałeś też że "taby" to tak na prawdę filtry. Pomijam kwestię że trochę osobliwe rozwiązanie wymyśliłeś. Rozumiem że tekst na tab parsowany jest do jakiejś wartości enuma. Dlaczego nie zrobisz combobox'a do wyboru filtru? Lub po prostu kontrolek do filtrowania nad odpowiednimi kolumnami. Podpatrz sobie rozwiązania np. DevExpress czy Telerika.

Rozumiem że jeśli chodzi o pozycjonowanie kontrolek etc. nie masz doświadczenia, stąd łatwiej użyć ci TabControl i w sumie jest to ok podejście.
Zachęcam do zapoznania się z Dock i Anchor.
Możesz też podpatrywać pewne rozwiązania na codeproject.com, można tam sporo fajny rozwiązań znaleźć.

DI
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:5
0
massther napisał(a)

"mowisz o zupelnie innych tabelach na jednym gridzie a to jest amatorsko" - zależy, jeśli chcesz mieć generyczny mechanizm wyświetlający dane z dowolnego źródła to nie jest to wcale amatorsko, wręcz przeciwnie, nie wyobrażam sobie tego inaczej, niż stosować jednego grid'a, czy ogólniej kontrolki wyświetlającej dane. Oczywiście źródło może zwracać też metadane precyzujące jak pewne elementy (czy nawet całość) zaprezentować.
Nie napisałeś też że "taby" to tak na prawdę filtry. Pomijam kwestię że trochę osobliwe rozwiązanie wymyśliłeś. Rozumiem że tekst na tab parsowany jest do jakiejś wartości enuma. Dlaczego nie zrobisz combobox'a do wyboru filtru? Lub po prostu kontrolek do filtrowania nad odpowiednimi kolumnami. Podpatrz sobie rozwiązania np. DevExpress czy Telerika.

Rozumiem że jeśli chodzi o pozycjonowanie kontrolek etc. nie masz doświadczenia, stąd łatwiej użyć ci TabControl i w sumie jest to ok podejście.
Zachęcam do zapoznania się z Dock i Anchor.
Możesz też podpatrywać pewne rozwiązania na codeproject.com, można tam sporo fajny rozwiązań znaleźć.

Latwiej szybciej , debug free. W zasadzie to bylo czego szukalem, analizowalem inne rozwiązania i po prostu to mi odpowiadalo, nie chciałem się zakopać w tworzenie custom controlek , skoro ta funkcjonalność już istnieje, trzeba było tylko wymyślić workaround.

Co do grida , z refleksji musialbys tworzyc kolumny na bazie pol w klasie, czy tam dataset, entity czy co uzywasz. Niezle rozwiazanie nie pomyslalem o tym ,ale w tym projekcie ktory aktualnie robie jest mi to zupełnie niepotrzebne. Wydaje mi sie jednak że ciężej byłoby tym zarządzac, nie mając tego w designerze. Szkoda mojej pary na takie rozwiązania, tylko po to żeby wyświetlić jedną tabelę :)

Taby to nie filtry. Podalem ci to jako przykład. będą to różne zestawy danych z jednej tabeli. Na przyciskach tabów bede potrzebował wyświetlić stan (zajęty ,działa) w postaci ikonki - combo odpada.

Dzięki za komentarz, jednak zostane przy swoim rozwiązaniu , gdyż implementacja tego nie zajela mi dłużej niż 5 min (poza szukaniem jak to zrobić oczywiscie)

edytowany 2x, ostatnio: diseasex
quetzalcoatl
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 6 lat
0

sluchaj, nie chce marudzic.. ale na serio zamiast tabow z wysokoscia zero, nie sensowniejsze byloby wziecie radio ze skinem (toggle)button?
wiem ze one troche inaczej wyglada, ale daja Ci wiecej kontroli w kontekscie blokowanie/enabled/visible/itp..


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał
DI
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:5
0

a jak rozwiążesz to:

http://img843.imageshack.us/i/beztytuucn.jpg/

edit : oczywiscie tak zeby sie nie narobic ;)

edytowany 2x, ostatnio: diseasex
quetzalcoatl
fakt:) nie zwrocilem uwagi ze wczesniej wspominales o bardzoduzej* liczbie tabów, to dorzuca o wiele wiecej potencjalnej pracy do zrobienia
massther
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 9 lat
0

hmmm, kilka sztuczek i da się zrobić.
panel w panelu i w tym wewnętrznym przyciski, a w zewnętrznym te przyciski do przesuwania, które powodują odpowiednie przesuwanie panelu wewnętrznego, oczywiście do tego trochę warunków, żeby nie przesuwać zbyt dalego tego panelu wew.
to taki na szybko pomysł :) można oczywiście bardziej pokombinować

DI
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 14 lat
  • Postów:5
0
massther napisał(a)

hmmm, kilka sztuczek i da się zrobić.
panel w panelu i w tym wewnętrznym przyciski, a w zewnętrznym te przyciski do przesuwania, które powodują odpowiednie przesuwanie panelu wewnętrznego, oczywiście do tego trochę warunków, żeby nie przesuwać zbyt dalego tego panelu wew.
to taki na szybko pomysł :) można oczywiście bardziej pokombinować

obliczac szerokosc forma, dzielic przez liczbe przyciskow i takie tam, potem przestawiac o rozmiar przyciskow po przycisnieciu strzalki. Stosunkowo latwe, jak zacznie mnie tabControl ograniczac to bede musial przy tym przysiasc i to zrobic.

massther
No i to się nazywa dobre podejście. :)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)