Odwołanie się do kontrolki, tworzonej NIE dynamicznie

0

Oto problem napotkałem po bezdrożach formatek chodząc.
Chęcią moją było kontrolkę, uprzednio należycie na formę położoną, odświeżyć.

Ku zdziwieniu memu, takowa konstrukcja działać nie chce, złośliwie NullException wyjątek rzucając, co w domyśle oznacza, że kontrolki na formie nie znalazło.

Application.OpenForms[0].Controls["txtReport"].Text = Log.buffer.ToString();

Jakże inaczej do kontrolki tej się dostać? Zważcie proszę bracia w odpowiedziach swych, że kontrolki tej dynamicznie nie tworzę, albowiem ręcznie ją położyłem w designerze, jeno odwołać się do niej nie mogę. Cóż źle robię? Gdzie odpowiedź znaleźć?

0

Czy pewność masz, iż to kontrolki exception rzucają a nie prawa strona zapisu? Log (lub bufer), również mają prawo rzucać wyjątek w pewnych przypadkach - jednak nie można tego stwierdzić na pewno w twoim przypadku bez większej dawki kodu.

0

Log klasą statyczną jest, co w sobie StringBuilder buffer zawiera, a debugger uczciwie podpowiada, że obiekt StringBuildera zaiste przechowuje.
Dlatego oczy swe zwracam ku kolekcji Controls.

Formatka następująco jest zbudowana:
FormMain -> tabControl -> txtReport

Jednakże ani powyższy kod, ani poniższy nie zapobiega wyjątkowi:

Application.OpenForms[0].Controls["tabControl"].Controls["txtReport"].Text = Log.buffer.ToString();

Dzielny jestem, jeno pomysłów zaczyna mi brakować.

0

spróbuj przeszukać taką funkcją (zapożyczone z bloga Maćka Aniserowicza):

public static IEnumerable<Control> AllChildControls(this Control instance)
{
 	foreach (Control control in instance.Controls)
 	{
 		yield return control;
 		foreach (Control childControl in control.AllChildControls())
 			yield return childControl;
 	}
}
0

Po pierwsze, czy masz pewność, że Application.OpenForms[0] to jest rzeczywiście to okno, w którym chcesz kontrolkę znaleźć, po drugie - czy ta tablica nie zawiera przypadkiem obiektów klasy Form, które trzeba dopiero rzutować na obiekty reprezentujące KONKRETNIE twoje okno? W takim wypadku nie dziw się że nie działa - lepiej sprawdz sobie co zawiera tablica Controls, moze byc tak ze jest całkiem pusta (debugger się kłania), jako że obiekt klasy bazowej Form chyba twoich kontrolek zawierać nie może?

A po trzecie, skoro chcesz odwołać się tylko do JEDNEJ kontrolki, to po kiego grzyba robisz to w ten sposób? Napisz sobie publiczna metodę, która będzie dopisywać tekst do tego twojego txtReport i wywołuj ją gdzie trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1