CentrumXP.pl » Witamy
CentrumXP.pl
 
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy zamierzasz pobrać Internet Explorer 9?


CentrumXP.pl » Microsoft .NET » Visual C# w praktyce » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

Commander w C#

Autor: Marcin Hałaczkiewicz    Opublikowano: 24 kwietnia 2007    Odsłon: 64087    »Skomentuj...
Strona:
Zobacz również:

Analogowy zegarek

Budzik w C#

Kalkulator w C#

Komunikator w C#

Mini Paint w C#

Notatnik w C#

Przeglądarka internetowa w C#

Przeglądarka zdjęć w C#

Przetwarzanie obrazów

Snake w C#

Tetris w C#

Wygaszacz ekranu w C#

»Uzyskaj pomoc na forum

Zajmijmy się teraz nawigacją okien. W tym celu stwórzmy dwa zdarzenia KeyDown oraz MouseDoubleClick dla kontrolek lvOkno1 i lvOkno2. Nie róbmy tego jednak w standardowy sposób, tj. klikając dwa razy na odpowiednim zdarzeniu na liście zdarzeń. Wpiszmy nazwy ręcznie - dla obu okien tak samo. Dla MouseDoubleClick będzie to lvOkno_MouseDoubleClick, a dla KeyDown - lvOkno_KeyDown. Zdarzenia różnią się jedynie "głównym if-em", który dla MouseDoubleClick sprawdza czy kliknęliśmy lewym przyciskiem, a dla KeyDown - czy wcisnęliśmy Enter. Wnętrze if-a sprawdza czy chcemy przejść do katalogu wyżej (element "..."), przejść do nowego katalogu czy otworzyć plik i odpowiednio reaguje na naszą akcję. Tzn. przechodzi poziom wyżej, wyświetla zawartość nowego katalogu lub próbuje otworzyć plik (w przypadku niepowodzenia zostanie wyświetlony komunikat o błędzie).

Pozostało nam jedynie oprogramowanie kliknięć na przyciski. cmdOtworz_Click sprawdzi czy został wybrany dokładnie jeden element. Jeśli tak, zachowa się tak samo jak naciśnięcie Enter lub podwójne kliknięcie na elemencie, czyli otworzy go w odpowiedni dla jego typu sposób. cmdKopiuj_Click spowoduje przekopiowanie wszystkich zaznaczonych elementów z aktywnego okna do bieżącego katalogu w oknie nieaktywnym. Oczywiście inną funkcję wywoła dla katalogów, a inną dla plików. Po wszystkim zaktualizuje zawartość nieaktywnego okna, czyli tego, do którego kopiowaliśmy. cmdPrzenies_Click robi to samo, ale po skopiowaniu kasuje pliki, które kopiowaliśmy, czyli de facto je przenosi. Ostatnie zdarzenie cmdUsun_Click nie spowoduje nic innego jak usunięcie zaznaczonych elementów. Wcześniej poprosi nas o potwierdzenie wyboru, a po wszystkim zaktualizuje zawartość odpowiedniego okna.

Na koniec pozostało jedynie zdarzenie Click dla formy. Jeśli został naciśnięty któryś z klawiszy funkcyjnych (zgodnie z etykietami na przyciskach) to zostanie podjęta odpowiednia akcja. I tak oto nasz programik jest ukończony. Jest całkiem funkcjonalny i może posłużyć w zastępstwie niezbyt lubianego eksploratora w Windows. Oczywiście do "prawdziwego" programu trochę mu brakuje. Można by go wyposażyć w wiele innych opcji, jak choćby połączenie ftp, czy zwykłe Zmień Nazwę. Zachęcam do samodzielnego eksperymentowania.


«Wstecz 1 2 3 

Aktualna ocena to: 3,23

Oceń artykuł...
Porażka Kiepski Taki Sobie Dobry Super!

Tagi:  

A teraz:    Dodaj do ulubionych Dodaj do ulubionych    Wydrukuj Wydrukuj    Wyślij link znajomemu Wyślij link znajomemu    Skomentuj Skomentuj

Komentarze do Commander w C#

Dodaj komentarz»

kamas 12 lipca 2007, 14:11

Przykład bardzo ciekawy, ale wydaje mi się, że wkradł się mały błąd: Wywołanie funkcji lvOkno_MouseDoubleClick(object sender, MouseEventArgs e) z parametrami null powoduje zgłoszenie wyjątku (takie wywołanie ma miejsce wewnątrz funkcji cmdOtworz_Click(object sender, EventArgs e)). Powodem zgłoszenia wyjątku jest poniższa instrukcja warunkowa w funkcji lvOkno_MouseDoubleClick: if (e.Button == MouseButtons.Left) Ponieważ obiekt e nie istnieje (przekazaliśmy null do funkcji) nie można go z niczym porównywać. Dla mniej doświadczonych czytelników przedstawiam proste rozwiązanie: Instrukcja warunkowa powinna wyglądać tak: if (e == null || e.Button == MouseButtons.Left) Ważne jest, aby warunek e == null występował jako pierwszy, gdyż jeśli jest on spełniony to 2 warunek nie będzie sprawdzany i nie wygeneruje błędu (skrócone wyznaczanie wartości wyrażeń). I jeszcze jedna rzecz, którą bym zmienił/poprawił: funkcja wyswietl() może wygenerować wyjątek jeśli spróbujemy otworzyć katalog, do którego nie mamy dostępu (np System Volume Information). Wystarczy umieścić kod funkcji w bloku try, natomiast w bloku catch wstawić MessageBox z informacją o braku dostępu do katalogu.

mon 23 lipca 2007, 14:08

hmmm, coś MouseDoubleClick nie działa...

x or y? 12 sierpnia 2007, 1:30

Hmm...wszystko pieknieładnie ale prosiłbym o gotowy projekt, wielka prośba. z góry dziekuję.

Napi 20 listopada 2007, 14:51

Może nieuważnie coś przekleiłem gdzie indziej, ale... u mnie wchodząc w katalog na dysku innym niż C: program się sypał - katalogu wyświetlonego (np.) z D: szukał na C:... Najprościej dodać linkijkę dla ComboBox"ów jak poniżej: private void Dysk1_SelectedIndexChanged(object sender, EventArgs e) { sciezka1 = cbxDysk.Text; AktywnaSciezka = cbxDysk.Text; //poprawka

pewoj 8 stycznia 2008, 20:32

zrobiłem zapisałem i uruchamiam aplikację nagle w polach Dysk 1 2 liOkno 1 2 są puste co zrobiłem zle

Vesp3r 1 marca 2008, 14:24

Wszystko łądnei pięknei ale niedziała w ogóle :| Program wysypuje się u mnie już na "FileInfo plik;" i pokazuje ze takeigo czegoś nie moze znaleźć :/

krho 23 czerwca 2008, 0:13

@Vesp3r musisz dodać na początku using System.IO;

Janekk 30 października 2008, 0:41

wszystko extra zrobilem i niedziala nie wyswietla mi nic w ComboBoxie oraz w ListView... kompletnie puste... kto wysle dzialajacy projekt? z gory dzieki... GG:6347525

Janekk 10 listopada 2008, 14:42

to ktos mi powie jak to zrobic, lub da projekcik? :)

Justin 7 grudnia 2008, 0:28

ty janek pewnie skopiowales caly kod do siebie tak? musisz ręcznie wywolac eventy dla form bo program ich nei widzi jak je skopiujesz pozatym jest tam pare burakow nazewniczych 

bzzzz 7 grudnia 2008, 0:51

w obsludze kopiowania jest mozliwosc zapetlenia rekurencji :">
a nikt nie lubi miec duzo folderow o tej samej nazwie jeden pod drugim :">
 
ja to tak rozwiazalem:
 
<br />                    if (AktSciezka + AktOkno.SelectedItems.Text + "\\" == NAktSciezka)<br />                    {<br />                        MessageBox.Show("NIE WOLNO ZAPETLAC REKURENCJI!! ", "error");<br />                        return;<br />                    }<br />                    <br />                    zrodlo = AktSciezka + AktOkno.SelectedItems.Text + "\\";<br />                    cel = NAktSciezka + AktOkno.SelectedItems.Text + "\\";<br />                    KopejDira(zrodlo, cel);<br />

freemp3 8 grudnia 2008, 16:15

No programik bardzo ładnie tyle, że nie działa. Normalnie się włącza ale, że tak powiem nic nie robi. W combobox-ach moge pisać co chce i jest zero reakcji, przyciski też sobie moge wćiskać ile chce i nic. Tak jak by wogóle kodu z funkcjami nie było :/

HANYS 24 grudnia 2008, 13:22

Nie działa mi ten program nie moge dysków otwierac w comboboksie a potrzebuje drzewko plików i folderów zboku do mojej przegladarki prosze o pomoc GG 1069394

Janekk 4 stycznia 2009, 18:54

nic nie rozumiem wezcie mi napiszcie projekcik dzialajacy, 5% osobom sie udalo zrobic a 95% nie umie...

Alucard 17 stycznia 2009, 17:08

Podaj maila to prześle Ci działający programik

Janekk 19 stycznia 2009, 22:27

VandziorX@o2.pl
 
dziex ;)

Janekk 19 stycznia 2009, 22:28

(sory ze 2 posty na raz)
 
ale projekt daj ok ;) z gory dzieki ;)

Maciek 28 stycznia 2009, 21:58

Też mam pytanie, wydaje mi się że wszystko zrobiłem dobrze, a mimo to po włączeniu programu, nie wyświetla się zawartoś dysków mimo iż program zczytuje wszystkie napędy w komputerze? Co może być nie tak?

Eider878 15 lutego 2009, 10:13

Właśnie, coś jest nie tak z tym kodem...

ES 15 lutego 2009, 17:18

Może mi ktoś przesłać projekt na emaila: robotboy111@gmail.com
 
Z góry dziękuję

tajniak 27 lutego 2009, 12:44

Ej! Przecie zrobienie tego to bułka z masłem. Fakt, że jest tam błąd, ale pierwszy komentarz kamas"a pokazuje jak go rozwiązać. I nie przeklepujcie w ciemno kodu - przeczytajcie komentarz Justin:
 
"ty janek pewnie skopiowales caly kod do siebie tak? musisz ręcznie wywolac eventy dla form bo program ich nei widzi jak je skopiujesz pozatym jest tam pare burakow nazewniczych "

 
...

wszystko działa ... wystarczy czytac ...

ES 4 marca 2009, 21:25

Jeżeli jesteś taki mądry to pokaż to i daj link do pliku

MP 5 marca 2009, 18:48

Nie wiem dlaczego, ale po kompilacji programu wyświetla się tylko interface... żadna z funkcji programu nie działa (po prostu tak jakby jej nie było). Poza tym wywala błąd using System.Linq; oraz odwołuje się do nazwy Directory.
Jeżeli są w śród nas jeszcze dobrzy ludzie to proszę niech ktoś mi podeśle działający kod źródłowy pod:
pawel-m_p@tlen.pl
 
z góry dzięki :">
 

Janekk 9 marca 2009, 21:12

ok pogrzebalem i nie dzialalo ale na forum jednym napisalem i odrazu pomogli ;)

ES 12 marca 2009, 20:43

Mógłbyś podać adres tego forum?

ES 15 marca 2009, 16:08

Trochę pogrzebałem i działa, tylko na Win Vista mówi, że błąd dostępu do dysku, ale na XP działa...

HERKI 11 maja 2009, 9:00

Witam. Mam do Was pytanie, czy komuś działają przyciski funkcyjne (F5,F6,F7,F8) ?? Jeśli ktoś ma na to rozwiązanie to proszę o kontakt na GG:1905825 lub herki17@gmail.com

maksio1 6 czerwca 2009, 9:19

Co do przycisków funkcyjnych, to trzeba jedynie ustawić we właściwościach przycisku odpowiedni skrót klawiszowy we właściwości przycisku: "ShortcutKeys". Potem ustawić zdarzenie "ShowShortcutKeys" na false. Podobnie z resztą przycisków. No i po co się tak męczyć ze skrótami?

Szefik 8 lipca 2009, 21:05

moglby ktos wysłać ten program na mail szefik19@wp.pl 
Z góry dzięki...

Ufolec 10 lipca 2009, 11:59

Ludzie ja nie wiem w czym wy widzicie problem, uważam że wszelkie kłopoty zostały rozwiane w komentarzach powyżej różnych ludzi. Jeśli nie robiliście tego sami tylko skopiowaliście kod i dodaliście kontrolki, to jeśli chcecie by program coś robił - POWINNIŚCIE DO ZDARZEŃ KONTROLEK (EVENT) DODAĆ POSZCZEGÓLNE FUNKCJE, było już o tym kilka razy pisane, ale nadal macie z tym problem? Poza tym chciałbym w tym komentarzu podziękować za tego Commandera, oraz chociażby autorowi pierwszego komentarza (kamas) który bardzo szybko uporał się z małymi niedoróbkami projektu i się tym podzielił z resztą świata. Sam artykuł oceniam na pełne 4. Pozdrawiam.

MAT44869 22 września 2009, 17:02

Nie Wiem o co Wam chodzi, wsztko działa idealnie! I nie kopiujcie w sślepo kodu bo się pogubicie! Myślcie co kopiujecie i gdzie to dajecie.

jj 18 listopada 2009, 12:36

a ja mając Win7 nie mogę się dostać do katalogu "Documents and Settings" zwraca wyjątek - brak dostępu. jak to można rozwiazać?

J 20 listopada 2009, 20:48

Jakby nie patrzyć program tochę lipny. W normalnych systemach obok nazwy katalogu lub pliku pojawia się jego ikonka. A tu? Auto poszedł na łatwiznę i wylistował jedynie zawartość katalogu. :-/

eidersoft 14 stycznia 2010, 15:31

Jeżeli ktoś ma jakieś problemy z kompilacja możecie pobrać kod źródłowy + skompilowany program pod adresem: http://www.eider.boo.pl/upload/Commander.zip

dzadzar 29 stycznia 2010, 14:48

link niestety nie działa:( można jeszcze raz upnąć?

Beginner 19 lutego 2010, 0:02

Działa w sumie, ale trzeba wszystkie eventy wywołać ;)

$tomek 3 marca 2010, 18:31

Po drobnych problemach udało się! Programik działa, jest ok

Paweł 5 marca 2010, 11:17

Jak dodać event dla kontrolki?

Ania 30 marca 2010, 14:34

Co do zapetlania się rekurencyjnie wywoływanej procedury KopiujKatalog, wystarczy w niej zamienić miejscami 2 wiersze na:             nazwy = Directory.GetFileSystemEntries(zrodlo);             if (!Directory.Exists(cel)) Directory.CreateDirectory(cel); i to, o czym pisał: bzzzz 7 grudnia 2008, 0:51 - jest już zbedne.

Maury 22 sierpnia 2010, 15:34

Ja mam dziwny problem, program dziala ladnie i wogole. Ale w Jak go uruchamiam to w lvOkno1 nie wyswietla sie nic jakby niedzialalo. Co moze byc nie tak?? Poprawilem wszystko z tych komentarzy, co jeszcze moge zrobic ??

Nerin 21 listopada 2010, 13:30

ListView ma wbudowane funkcje do czytania wszystkich plików i folderów, pisząc "Microsoft" nie wpadł na to, zapewne korzystasz z windowsa z zamkniętymi oczyma. Ale poradnik bardzo ładny.

Mich4el 28 stycznia 2011, 6:03

Prześlij ktoś proszę mi ten projekt gotowy jezymut@gmail.com

max_zone 3 lutego 2011, 18:28

Witam dzieki wasyzm komentarza naprawilem te niewielkie bledy nadal nie dzialaja mi skroty klawiszowe nie ma takiej wlasnosci na buton shortkey ale wyczytalem w microsoft ze powino dzialas keydown mam z tym kodem :  private void FTP_KeyDown(object sender, KeyEventArgs e)         {                        switch (e.KeyCode)             {                 case Keys.F5:                                        cmdOtworz_Click(null, null);                     break;                 case Keys.F6:                     cmdKopiuj_Click(null, null);                     break;                 case Keys.F7:                     cmdPrzenies_Click(null, null);                     break;                 case Keys.F8:                     cmdUsun_Click(null, null);                     break;             }         }

max_zone 3 lutego 2011, 18:28

Oczywiscie na zdazenie events nie kopiowanie recznie do kodu . Niestety nie dziala probowalme messagesboxshow ale wogole nie dochodzi co zadnego case zwykly if tez nie dziala probowalem na innym kodzie: w innym zdarzeniu tez nie dziala  Pomozcie        private void FTP_KeyPress(object sender, KeyPressEventArgs e)         {             switch (e.KeyChar)             {                 case ((char)116):                     cmdOtworz_Click(null, null);                     break;                 case ((char)117):                     cmdKopiuj_Click(null, null);                     break;                 case ((char)118):                     cmdPrzenies_Click(null, null);                     break;                 case ((char)119):                     cmdUsun_Click(null, null);                     break;             }

max_zone 3 lutego 2011, 18:30

Key_preview na true w wlasnosciach forma trzeba dac.No ok juz mam moglem poczekac z tym komentarzem ale no coz moze komus sie przydaja acii code :)

Kamil 24 czerwca 2011, 11:18

Panowie ale zauwazyliście ze gdy nie mam aktywnej listy z plikam klikamy button Usun to program sie wysypuje? jakby nie działał if(AktywneOkno == null) wicie co jest grane?

Kamil 24 czerwca 2011, 12:33

Okej zastosowanie zdarzenia Enter jest błedne focus dla kontrolki listaplikow ejst ustawiany zanim program sie uruchomi :) czyli jakby zawsze atywne okno nie będzie nullem i warunek if(aktywneokno ==null) nigdy nie zostanie spełniuony proponuje użyc zdarzenia click :)

Krzysiek Q 22 października 2011, 23:10

Interesuje mnie jedna rzecz. Czemu tak prosty projekt zajmuje 28Mb pamięci, gdzie cały działający Total Commader tylko 12? Jak to można odchudzić?


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2012 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plXboxSpot.pl  |  Jama Mastaha