CentrumXP.pl » Witamy
CentrumXP.pl
 
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy byłbyś zainteresowany mobilną wersją Portalu CentrumXP.mobi dla komórek?

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: 47955    »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

Dziś napiszemy program przypominający Windows Commandera, Total Commandera czy rządzącego w czasach DOS-a Norton Commandera. Innymi słowy nasza aplikacja będzie służyć do przeglądania zawartości dysków (płyt), dyskietek. Będzie umożliwiać również podstawowe operacje na plikach i folderach, tzn. kopiowanie, przenoszenie oraz usuwanie.

Zaczynamy od stworzenia nowego projektu, który nazywamy Commander. Nazwę formy oraz pliku z nią (Form1.cs) zmieniamy na frmCommander. Ustawiamy rozmiar oraz minimalny rozmiar (Size i MinimumSize) na 433;371. We właściwości Text wpisujemy Commander. Do formy dodajemy dwie kontrolki ListView. Nazywamy je lvOkno1 i lvOkno2. Rozmiary obydwu zmieniamy na 200;250. Lokalizacja pierwszego okna to 12;42, a drugiego 215;42. W obu kontrolkach ustawiamy HideSelection na False - dzięki temu po utracie "focusu" przez kontrolkę nadal będzie widoczne, który element jest zaznaczony (niebieskie zaznaczenie nie zniknie). Również dla obu kontrolek ustawiamy View na Details oraz FullRowSelect na true. Spowoduje to wyświetlanie elementów okien w widoku szczegółowym oraz to, że po wybraniu wiersza, będzie on cały zaznaczony na niebiesko, a także możliwość wybrania wiersza po kliknięciu w dowolne jego miejsce, a nie tylko na szerokości pierwszej kolumny. Aby stworzyć poszczególne pionowe sekcje widoku szczegółowego (dla obu okien będą takie same) klikamy na wielokropek we właściwości Columns i za pomocą przycisku Add dodajemy trzy kolumny i kolejno zmieniamy ich właściwość Text na Nazwa, Typ oraz Rozmiar. Zmieńmy jeszcze właściwości Anchor: lewego okna na Top, Bottom, Left, a prawego na Top, Bottom, Right. Spowoduje to trzymanie się kontrolek odpowiednich boków podczas rozciągania formy.

W oknach, które przed chwilą stworzyliśmy będą wyświetlać się zawartości dysków. Stwórzmy teraz element, który pozwoli wybrać napęd. Dodajemy do formy dwie kontrolki ComboBox. Nazwijmy je Dysk1 oraz Dysk2. Rozmiar zostawiamy domyślny, zmieniamy położenie na 12;12 dla pierwszej oraz na 215;12 dla drugiej. Ponadto dla Dysk2 zmieniamy Anchor na Top, aby ComboBox trzymał się jedynie górnej krawędzi podczas rozciągania.

Z wyglądu formy pozostały nam jeszcze jedynie przyciski. Tworzymy cztery i zmieniamy ich nazwy na kolejno: cmdOtworz, cmdKopiuj, cmdPrzenies oraz cmdUsun, a położenia na kolejno: 12;298, 112;298, 215;298 i 315;298. Rozmiary wszystkich przycisków ustawiamy na 100;35, a właściwość Anchor na Bottom. W polu Text będziemy wpisywać w dwóch linijkach, aby było to możliwe, przed rozpoczęciem wpisywania tekstu musimy kliknąć na strzałce przy właściwości Text. W drugiej linijce znajdzie się nazwa klawisza funkcyjnego. Wpisujemy kolejno: Otwórz wciskamy na klawiaturze enter oraz dopisujemy tekst F5, dla drugiego przycisku wpisujemy  Kopiuj <enter> F6, dla trzeciego: Przenieś <enter> F7 oraz dla ostatniego: Usuń <enter> F8.

To tyle jeśli chodzi o wygląd aplikacji (no może nie do końca, ale o tym później). Zajmijmy się funkcjonalnością programu. Dodajemy do klasy z formą sześć zmiennych pomocniczych, których funkcje odpowiadają ich nazwom. Są to:

private ListView AktywneOkno = null;
private string AktywnaSciezka;
private ListView NieAktywneOkno = null;
private string NieAktywnaSciezka;
private string sciezka1 = "C:\\"; // sciezka dla lvOkno1
private string sciezka2 = "C:\\"; // sciezka dla lvOkno2


1 2 3 Dalej» 

Aktualna ocena to: 3,08

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.


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2009 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plSklep on-line  |  Komputer w firmie  |  XboxSpot.pl  |  Live Blog  |  Jama MastahaDevelopers.pl