• 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

VPS Starter Arubacloud
0 głosów
1,183 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ź 532 wizyt
0 głosów
1 odpowiedź 238 wizyt
pytanie zadane 18 marca 2019 w C i C++ przez Sic Dyskutant (8,510 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...