bober370
(bober370)
2 Wrzesień 2011 20:51
#1
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 : )
Fiolek
(Fiołek)
2 Wrzesień 2011 21:14
#2
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 Musisz pokazać więcej kodu, bo to co dałeś niewiele mówi(stawiam, że przy wywoływaniu Show coś nadpisuje dane).
matzu
(Tomek Matz)
2 Wrzesień 2011 21:24
#3
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”?
bober370
(bober370)
2 Wrzesień 2011 21:26
#4
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
Fiolek
(Fiołek)
2 Wrzesień 2011 21:29
#5
Nie podałeś tego.
Nigdzie nie widzę, żebyś tą formę gdziekolwiek pokazywał(więc w sumie kod liderpanel.Load nie jest potrzebny).
bober370
(bober370)
2 Wrzesień 2011 21:32
#6
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();
}
matzu
(Tomek Matz)
2 Wrzesień 2011 21:40
#7
Co poprzez ten kod chcesz osiągnąć
liderpanel global = new liderpanel();
global.setPanelStatus("Pomyślnie zapisano");
global.toggleAdminFunc();
Close();
?
bober370
(bober370)
2 Wrzesień 2011 21:43
#8
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)
matzu
(Tomek Matz)
2 Wrzesień 2011 21:48
#9
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:
bober370
(bober370)
2 Wrzesień 2011 21:56
#10
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
matzu
(Tomek Matz)
2 Wrzesień 2011 22:03
#11
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.
bober370
(bober370)
2 Wrzesień 2011 22:10
#12
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
matzu
(Tomek Matz)
2 Wrzesień 2011 22:17
#13
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.
matzu
(Tomek Matz)
2 Wrzesień 2011 22:29
#15
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;