• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przesyłanie / dostęp do zmiennych z innego pliku

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,408 wizyt
pytanie zadane 28 czerwca 2018 w C# przez Alan1221 Użytkownik (950 p.)
W jaki sposób mieć dostęp do zmiennej (string) z poziomu innego pliku (*.cs)? Wiem, że istnieje coś takiego jak public static, ale to nie działa. Kiedy deklaruję coś takiego:

public static string FilePath = openFileDialog1.FileName;

to wyskakuje mi błąd: 'The name 'openFileDialog1' does not exist in the current context i cały kod w dół przestaje działać. Kiedy usunę public static to wszystko jest ok. Dodam, że jest to w if-ie. Jak później z innego pliku odczytać wartość?

1 odpowiedź

+2 głosów
odpowiedź 29 czerwca 2018 przez mbady Obywatel (1,280 p.)
wybrane 29 czerwca 2018 przez Alan1221
 
Najlepsza

Następnym razem postaraj się dołączyć jakieś fragmenty kodu, bo to może pomóc w analizie.

Poniżej mały wstęp, a próba odpowiedzi po linii poziomej za wstępem.

Ogólnie stwierdzenie "dostęp do zmiennej (string) z poziomu innego pliku (*.cs)" nie jest odpowiednie gdyż zmienna w pliku jest tylko informacją/deklaracją/szablonem (tu: możesz wrócić do podstaw czym jest zmienna i do reprezentacji zmiennej w pamięci komputera, itp.).

Aby móc odwołać się do zmiennej (mieć dostęp) musi ona istnieć w pamięci komputera, czy to na poziomie globalnym, czy w relacji ze zmienną na poziomie innego obiektu (dla uproszczenia kontenera zmiennych, powiedzmy na poziomie lokalnym).

Aby dwie zmienne lub obiekty (reprezentacje fizyczne klas zdefiniowanych w pliku *.cs) mogły się widzieć, muszą zostać utworzone oraz być w relacji pomiędzy sobą i tak na prawdę nie masz dostępu do zmiennej w pliku tylko do zmiennej, która jest w pamięci i ma odpowiedni zakres widoczności z miejsca z którego się odwołujemy.

Z tego co zauważyłem to używasz instancji/obiektu OpenFileDialog do pobrania nazwy więc na początek warto zerknąć do dokumentacji, bo tam są gotowe przykłady.

Ten zapis: public static string FilePath = openFileDialog1.FileName; jest niepoprawny, gdyż przypisujesz właściwość (FileName) innego obiektu, który w tym miejscu nie istnieje, no chyba że też ma statyczny i globalny zasięg, a w twoim przypadku openFileDialog1 jest inną zmienna reprezentującą instancję klasy OpenFileDialog.

Ogólnie aby móc coś przekazać pomiędzy obiektami (fizycznymi reprezentacjami w pamięci definicji klas z plików *.cs), możemy tego dokonać na kilka sposobów, np.: poprzez przekazanie zmiennej przez konstruktor (główna metoda klasy), wywołanie metody innego obiektu, do której to przekażemy inną zmienną lub bezpośrednie przypisanie do właściwości innego obiektu.


Ciężko pisać bez wiedzy jak wygląda twój kod ale ogólnie to w miejscu gdzie utworzyłeś swoje okno dialogowe lub zrobił to za ciebie generator Formy twojego okienka zmienna openFileDialog1 przechowuje obiekt okna do otwarcia pliku dlatego w miejscu gdzie masz dostęp do tej zmiennej i prawdopodobnie wywołujesz openFileDialog1.ShowDialog() to jest to jedyne miejsce, kiedy masz dostęp do właściwości FileName i w tym właśnie miejscu możesz przekazać to co ona zwraca innemu obiektowi ale to oznacza że musisz mieć do niego dostęp.

Np.: (pseudokod)

(pseudokod)
{
  string fileName;

  if(openFileDialog1.ShowDialog() == DialogResult.OK)
  {
    fileName = openFileDialog1;
  }

  // odwołanie do innego obiektu

  InnyObiekt obj = new InnyObiekt(); // tu tworzymy nowy no chyba że już jest utworzony w innym miejscu

  // przekazujemy mu zmienną przez metodę

  obj.SetFileName(fileName); // i teraz w obiekcie obj w wywołaniu metody SetFileName mamy wartość zmiennej.
}

Tu znajdziesz przykład rozwiązania twojego problemu Przekazywanie zmiennych między okienkami

Na zakończenie zachęcam do używania wyszukiwarki internetowej, gdyż też tam szukałem odpowiedzi na twoje pytanie.

 

komentarz 29 czerwca 2018 przez Alan1221 Użytkownik (950 p.)
Dziękuję za tak długa odpowiedź. Właśnie o to mi chodziło. Jeśli chodzi o szukanie w Internecie to szukałem długo i nic. Niedawno przerzuciłem się z konsolowego, ale jednak obiektowego c++ na c#.

Podobne pytania

0 głosów
1 odpowiedź 884 wizyt
0 głosów
1 odpowiedź 360 wizyt
pytanie zadane 18 marca 2019 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
3 odpowiedzi 1,150 wizyt

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - Michal Drewniak
  6. 2006p. - rucin93
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...