Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Zdziwiony

[C#][WPF]Dostęp do klasy innego okna

Rekomendowane odpowiedzi

Witam. Jak zwykle siadając do VS chcąc coś napisać napotykam problem... :E

Tym razem chodzi o dostęp do kontrolki z okna głównego aplikacji do okna "dziecka".

Udało mi się sklecić coś takiego:

console konsola = new console();
konsola.ConsoleWrite.Text += "Program rozpoczął pracę...";

Jednakże średnio rozumiem ten fragment kodu, dlatego prosiłbym Was, abyście mi go wytłumaczyli i pomogli go poprawić (bo TextBox w drugim oknie nie reaguje na wykonanie się tego kodu :/) :)

 

 

Proszę Was o pomoc :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To co skleciles to za malo. Jesli console to klasa potomnego okna to, upewnij sie ze TextBox (nazywa sie np tbxMyTextBox) na potomnym oknie jest publiczny. wpedy mozesz sie odwolac do niego

console konsola=new console(); konsola.tbxMyTextBox.Text = "Program...."

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jak sprawdzić czy TextBox jest publiczny ? Bo nie widzę tego we właściwosciach tej kontrolki. (Może jestem ślepy :E)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ogólnie, jeśli chcesz mieć dostęp z klasy A do pola w klasie B, musisz mieć obiekt klasy B. Czy w miejscu w którym chcesz mieć dostęp masz już ten obiekt? Jeśli tak, to musisz teraz z tego obiektu klasy B wyciągnąc pole które Cie interesuje. Poczytaj o modyfikatorach dostepu w C#. Dodatkowo w C# jest fajny mechanizm property, o tym tez poczytaj.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

mozna tez uzyc delegatów i eventow

 

i wtedy na przyklad z jednego obiektu wywolywac metody z drugiego obiektu z innej klasy

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie za bardzo rozumiem :E

Może opiszę to dokładniej :P

Mam dwa okna - jedno główne "MainWindow" i drugie potomne, które uruchamiam z pod "MainWindow" a nosi ono nazwę "console" (jest to nazwa okna oraz klasy tego okna)

No i teraz chcę sobie coś napisać w TextBoxie w tym drugim oknie, wiec spróbowałem zrobić coś takiego:

console konsola = new console(); //tworzenie obiektu konsola
konsola.ConsoleWrite.Text += "Program rozpoczął pracę..."; //pisanie po TextBocie "ConsoleWrite" w klasie console

 

Program działając z tym kodem nie wysypuje się... ale też nie działa tak jak powinien...

 

Ogólnie, jeśli chcesz mieć dostęp z klasy A do pola w klasie B, musisz mieć obiekt klasy B. Czy w miejscu w którym chcesz mieć dostęp masz już ten obiekt? Jeśli tak, to musisz teraz z tego obiektu klasy B wyciągnąc pole które Cie interesuje. Poczytaj o modyfikatorach dostepu w C#. Dodatkowo w C# jest fajny mechanizm property, o tym tez poczytaj.

1. Obiekt "chyba" mam :D (pierwsza linijka)

2. Pole próbuje wyciągnąć przez drugą linijkę (tak mi się wydaje :E)

 

Program kompiluje się, i się nie wysypuje, ale nie działa... Moje pytanie brzmi o czym zapomniałem :E ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Musisz pokazac swoj kod, bo tak ciezko bedzie tobie pomoc. Jak odpalasz swoj program (glowne okno) i odpalasz powyzsze linie to widzisz 2 okno?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak widzę drugie okno. Mogę pokazać reszte kodu (nie jest go za wiele :))

Okno MainWindow:

namespace Updater_test
{
   /// <summary>
   /// Logika interakcji dla klasy MainWindow.xaml
   /// </summary>
   public partial class MainWindow : Window
   {
       Thread thr; //zmienna globalna (wątek)
       public MainWindow()
       {
           (new console()).Show();
           InitializeComponent();

       }
       void Updater_Close(object sender, CancelEventArgs e)
       {
           Application.Current.Shutdown();
       }

       private void Aktualizuj_Click(object sender, RoutedEventArgs e)
       {
           console konsola = new console();
           konsola.ConsoleWrite.Text += "test..."; //nie działa...
           thr = new Thread(aktualizacja); //nowy wątek aktualizujący         
           thr.Start(); //uruchom wątek wyżej
       }

       private void aktualizacja()
       {
           //do zakodzenia
       }


   }
}

"Konsola"

namespace Updater_test
{
   /// <summary>
   /// Logika interakcji dla klasy console.xaml
   /// </summary>
   public partial class console : Window
   {
       public console()
       {
           InitializeComponent();
           ConsoleWrite.Text += "[iNFO] Program jest gotowy!"; //działa
       }
       public void Console_Close(object sender, CancelEventArgs e)
       {
           Application.Current.Shutdown();
       }
   }
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a co to to???

(new console()).Show(); ??? tutaj tworzysz "konsole" i ja pokazujesz i zapominasz.

tutaj tworzysz nowa instance ktorej nie pokazujesz...

console konsola = new console();

konsola.ConsoleWrite.Text += "test..."; //nie działa...

 

dodaj sobie nowa zmienna globalna np private Window1 myConsole;

public MainWindow()

{

InitializeComponent();

myConsole = new Window1();

myConsole.Show();

}

 

i dalej

myConsole.tbxConsole.Text = "from main window";

thr = new System.Threading.Thread(aktualizacja);

thr.Start();

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Rzeczywiście... to było trochę bez sensu :E

Teraz działa :) Serdeczne dzięki za pomoc! :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...