Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C#.NET - dodatkowy plik z kodem

15 Lip 2014 11:28 999 5
  • Poziom 8  
    Utworzyłem do projektu: New Code Files
    Który mam nazwany jako: CodeFiles1.cs

    Plik wygląda tak:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Jak mam teraz w głównym pliku Form1.cs wywołać tą metodę ?

    Próbuję tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Po prostu:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Ale sypią się błędy:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Niestety w google nie znalazłem innego przykładu który robi to co chcę aby robił. Ze względu na pewną długość (bowiem drzewko SWITACHA które walnę w funkcję będzie miało nawet 300 linii kodu, a takich drzewek będzie kilka) chciałem je po prostu wynieść do innych plików w których by to sobie tam było, a wywoływane byłyby z głównego pliku. Od razu jak jesteśmy w wątku, to tą metodą da się poprzez inny plik wywołać coś takiego:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Aby w pliku np. CodeFiles1.cs był ten kod Switcha a w Form1.cs tylko jego wywołanie, czyli to co ma się stać po naciśnięciu na element Listbox'a
  • Poziom 24  
    O to chodzi? CodeFile1.fun()

    Metoda powinna być statyczna (public static fun)
  • Pomocny post
    Poziom 31  
    mojzesz1 -> Nazywaj kontrolki i ogólnie obiekty zgodnie z ich przeznaczeniem. Zamiast button1 itd rób np SaveButton. Minie tydzień i się pogubisz, który numer buttona co robi.
    Nie używaj SelectedIndex w switchu - zmieni Ci się kolekcja listy i cały switch trzeba będzie poprawić. Użyj SelectedValue (tylko trzeba skonfigurować listbox odpowiednio oraz dostarczyć dane w odpowiedniej formie - brzmi mądrze, a trywialna sprawa).

    Używanie metod statycznych "bo się kod buduje" to niezbyt dobry pomysł. Zrób sobie jakąś klasę np OperationsHelper. Stwórz jej instancję (na formie w konstruktorze, albo w zdarzeniu SelectedIndexChanged) i używaj tej instancji. Mówiąc bardziej obrazowo:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Dobra nie ważne, za dużo zmian. Mimo użycia namespace w codeFiles1.cs nie mogę w nim odwoływać się do kontrolek zdefiniowanych w Form1.cs ... wywala :

    [syntex=csharp]
    Error 2 The name 'listBox1' does not exist in the current context
    [/syntax]

    a wg Internetu powinno działać ....
  • Pomocny post
    Poziom 40  
    Jeśli dobrze zrozumiałem, to chcesz przenieść kod z klasy formy do osobnego pliku z kodem. W takim wypadku wstawiasz do projektu plik klasy: Add->Class (teraz wstawiłeś chyba formę z której usunąłeś zawartość, bo ciągle dziedziczy po Form).

    Czyli wstawiasz sobie np. taką klasę:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    I korzystasz z niej tak:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Jeżeli nie musisz mieć zwrotnego dostępu do kontrolek z formy, wystarczy wywołać metodę jak w button1, ewentualnie przekazać jej parametry z kontrolek. Jeżeli natomiast chcesz w niej wykorzystać kontrolki formy, możesz je przekazać jako parametry jak w button2. Jeśli z tej klasy pomocnoczej będziesz korzystał często, to możesz też zadeklarować instancję codeFile tylko jeden raz, przed konstruktorem formy.

    Jeśli chodzi o tego długiego switcha to, co przedmówca radził: żeby nie korzystać z selectedindex (albo zaakceptować ryzyko modyfikacji kodu, jeśli coś się zmieni...). Zakładając, że będą wykonywane podobne operacje (widzę że uruchamiasz różne aplikacje?) proponuję zrobić własną klasę z polami np. klucz (wartości z listboxa) i nazwa aplikacji do otwarcia, utworzyć z niej tablicę lub listę (ewentualnie skorzystaj z Dictionary, zależy ile ma być parametrów), by zamiast switcha użyć jednej krótkiej metody, do której przekażesz jako parametry klucz (wybrana opcja w listboxie) i tablicę/listę/słownik, w którym pętlą odszukasz odpowiedni element po kluczu i wykona akcję dla jego parametrów.
  • Poziom 31  
    Oczywiście, że nie możesz się odwołać do prywatnych kontrolek jednej klasy w innej klasie. I bardzo dobrze! Nie przenoś całych kontrolek, tylko wartości, które z tych kontrolek potrzebujesz.
    Według internetu to pewnie działa, ale w obrębie jednej klasy - klasy formularza.