Używanie funkcji z innej formy nie wywołuje kodu

Problem jest następujący:

funkcja wywoływana z innego form niż ten w której jest napisany nie wywołuje kodu zawartego w funkcji ale zwraca wartość jeśli jest ona zawarta

np:

kod wygląda tak:

public void setPanelStatus(string text)

        {

            statuslabel.Text = text;

        }

i jest on wywoływany przez inny form w taki sposób:

liderpanel global = new liderpanel();

            global.setPanelStatus("Pomyślnie zapisano");

i jest problem ponieważ funkcja w tym przypadku nie zmienia textu labela.

W inny przypadku do którego już kodu nie podam zwraca jakąś wartość i jest ona odbiera przez form ale kod który jest zawarty sie nie wywołuje

Proszę o pomoc i dziękuje : )

Kod się wywołuję(ew. kompilator wycina nieużywany kod, ale w to wątpię) - nie widać tego efektów, albo są one gdzieś nadpisywane :wink: Musisz pokazać więcej kodu, bo to co dałeś niewiele mówi(stawiam, że przy wywoływaniu Show coś nadpisuje dane).

Tak jak napisał Fiołek. Konkretnie pokaż kod procedury obsługi zdarzenia Load form-y liderpanel. I jak możesz to popraw tytuł tematu … co to jest “wywałoje”?

wywoływanie:

private void button1_Click(object sender, EventArgs e)

        {

            Properties.Settings.Default.zapisywanie = checkBox1.Checked;

            Properties.Settings.Default.autologowanie = checkBox2.Checked;

            Properties.Settings.Default.narzedziaadmina = checkBox3.Checked;

            Properties.Settings.Default.Save();

            liderpanel global = new liderpanel();

            global.setPanelStatus("Pomyślnie zapisano");

            global.toggleAdminFunc();

            Close();

        }

funkcje wywoływane:

public void setPanelStatus(string text)

        {

            statuslabel.Text = text;

        }

public bool toggleAdminFunc()

        {

            bool toogle = Properties.Settings.Default.narzedziaadmina;

            textBox5.Visible = toogle;

            button2.Visible = toogle;

            return true;

        }

obydwie są używane w podstawowym formie

Nie podałeś tego.

Nigdzie nie widzę, żebyś tą formę gdziekolwiek pokazywał(więc w sumie kod liderpanel.Load nie jest potrzebny).

no to tak

pokazywanie formy liderpanel (podstawowej ze starem programu)

private void liderpanel_Load(object sender, EventArgs e)

        {

            this.Text = "Lider Panel in Window " + getVersion();

            tabControl1.Enabled = false;

            wyloguj.Enabled = false;

            setPanelStatus("");

            if (Properties.Settings.Default.zapisywanie)

            {

                string login = Properties.Settings.Default.nazwa;

                string haslo = Properties.Settings.Default.haslo;

                textBox1.Text = login;

                textBox2.Text = haslo;

                if (Properties.Settings.Default.autologowanie)

                {

                    zalogujToServer(login, haslo);

                }

            }

            toggleAdminFunc();

            if (redVersionFromWeb() != getVersion())

            {

                MessageBox.Show("Dostępna nowa wersja panelu!", "Aktualizator",MessageBoxButtons.OK,MessageBoxIcon.Information);

            }

        }

wywoływanie formy z ustawieniami

private void ustawieniaToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form set = new Form3();

            set.ShowDialog();

        }

Co poprzez ten kod chcesz osiągnąć

liderpanel global = new liderpanel();

global.setPanelStatus("Pomyślnie zapisano");

global.toggleAdminFunc();

Close();

?

przez setPanelStatus - informacje dla użytkownika że jego ustawienia zostały zapisane ( i zamknięcie okienka ustawień)

przez toogleAdminFunc - pokać/ukryć buttona i texbox do wpisywanie komend adminowych (ustawia to się w ustawieniach)

To moje pytanie miało wskazać na to, że ten Twój kod jest bezużyteczny. Zrobiłeś coś na zasadzie:

string s = "Inicjalizuję sobie zmienną.";

s = "Choć w sumie nie wiem po co, bo i tak nigdzie jej w jakiś sensowny sposób nie użyję.";

Close();

Zwróć uwagę na to:

do czego taki kod jest mi potrzebny to już raczej mój interes i nie chodzi w tym temacie o to do czego ja go używam.

co do tego:

nie za bardzo rozumiem o co chodzi

Hm, no ja już nie wiem jak jaśniej mogę pokazać na czym polega problem. To może inaczej …

Piszesz

Powiedz mi w jaki sposób chcesz zamknąć okienko ustawień, którego jeszcze nawet nie wyświetliłeś?

liderpanel global = new liderpanel();

global.setPanelStatus("Pomyślnie zapisano");

Gdzie tu jest wywołanie global.Show() ? Poza tym jaki jest sens zapisywania ustawień z okienka, które się samemu zainicjalizowało? Mam nadzieję, że teraz już wiesz, dlaczego napisałem, że ten kod jest bezużyteczny.

http://pobierz.cps.cityhost.pl/video-20 … -06-10.mp4

liderpanel to główne okno aplikacji a wywołanie było po otworzeniu 2 formy

Chyba do czegoś w końcu doszliśmy, ale jeszcze zapytam dla pewności, czyli tak … Otwierasz okienko z ustawieniami, klikasz zapisz i wtedy mają zostać wywołane funkcje setPanelStatus i toggleAdminFunc, które zdefiniowane są w obrębie głównej form-y? Jeśli tak, to potwierdź, a ja zaraz Ci wrzucę jak powinien wyglądać kod. Będzie potrzebnych kilka zmian.

tak

Poniższy kod zawiera Twoje nazewnictwo, więc wszystko powinno od razu działać. Po prostu podmień co trzeba.

private void ustawieniaToolStripMenuItem_Click(object sender, EventArgs e)

{

    Form3 set = new Form3();

    if (DialogResult.OK == set.ShowDialog(this))

    {

        setPanelStatus("Pomyślnie zapisano");

        toggleAdminFunc();

    }

}

private void button1_Click(object sender, EventArgs e)

{

    DialogResult = System.Windows.Forms.DialogResult.OK;


    Properties.Settings.Default.zapisywanie = checkBox1.Checked;

    Properties.Settings.Default.autologowanie = checkBox2.Checked;

    Properties.Settings.Default.narzedziaadmina = checkBox3.Checked;

    Properties.Settings.Default.Save();

}

W procedurze obsługi zdarzenia Click przycisku Anuluj umieszczonego na form-ie ustawień musisz na początku dodać taką linijkę kodu:

DialogResult = System.Windows.Forms.DialogResult.Cancel;

Dzięki : )