Hallo,
habe mal ne frage zum Panel.
Habe mehrere LinkLabel auf meiner Form und ein Panel. Wenn ich auf ein LinkLabel clicke dann füge ich dem Panel ein Benutzersteuerelement hinzu.
Wenn ich jetzt wieder auf den gleichen LinkLabel clicke dann wird dem Panel wieder eins hinzugefügt.
Wollte es jetzt so prüfen was aber nicht geht. Was ist den daran falsch?
private void llb_Arzt_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
{
PointLinkLabel();
this.llb_Arzt.LinkColor = Color.Red;
ArztSearchForm frm = new ArztSearchForm();
if(SearchPanel.Controls.Count < 1)
{
this.SearchPanel.Controls.Add(frm);
}
else
{
if(SearchPanel.Controls[0].Equals(frm)== false)
{
SearchPanel.Controls.RemoveAt(0);
this.SearchPanel.Controls.Add(frm);
}
}
this.llb_Arzt.ForeColor = Color.Red;
}
Was genau funktioniert denn nicht und was willst du erreichen?
Du schreibst das du weitere hinzufügen willst, aber der Code sieht eher so aus als ob du wenn du nochmal clickst das alte wieder entfernt werden soll.
Eigentlich möchte ich prüfen ob im panel schon das Benutzersteuerelement vorhanden ist. Wenn ja mach es sichbar.
Das habe ich aber nicht hinbekommen. Deshalb mein neuer Ansatz. Hier kann jetzt immer nur ein Benutzersteuerelement im Panel sein. Ist das gleich drin dann brauche ich ja nicht zuerst löschen um das gleiche wieder hinzu zu fügen.
Ich bekomme aber immer hier
if(SearchPanel.Controls[0].Equals(frm)== false)
false raus.
ob ein Control enthalten ist kannst du mit
SearchPanel.Controls.Contains(Control)
überprüfen.
Den Index des gewünschten Controls bekommt man über.
SearchPanel.Controls.IndexOf(Control)
Löschen würde so gehen.
SearchPanel.Controls.Remove(Control)
Hoffe dir hilft das.
Hallo cpetit,
ich würde mir an deiner Stelle das Panel jeweils in einer extra Variable merken. Dann musst du diese Variable nur auf != null abfragen.
BTW: [Tipp] Anfängerfehler == true / == false
herbivore
Hallo zusammen,
habe ich es richtig verstanden, dass Du eine Art "Seitennavigierung" realisieren möchtest? Also LinkLabel1 zeigt im Panel dann Benutzersteuerelement1 an, LinkLabel2 dann Benutzersteuerelement2, usw. ?
Dann würde ich sagen, dass Du am besten am Anfang alle Benutzersteuerelemente dem Panel zuordnest, sie aber alle mit der Eigenschaft Visible = false sofort unsichtbar machst.
Eine Klassenvariable merkt sich dann gerade aktuell ausgewähltes Benutzersteuerelement (initial hat es den Wert "Null").
Bei einem Klick auf ein LinkLabel musst Du nur noch feststellen, ob gemerktes Element gleich dem geklickten ist (dann ist nix zu tun), oder dann das "alte" Element wieder auf Unsichtbar setzen, das neue auf Sichtbar und Dir dann das neue merken lassen.
Das ist eventuell einfacher als jedes Mal das entsprechende Steuerelement hinzuzufügen und anderes zu löschen?
Viele Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Danke für eure Tipps.
Habe es jetzt so gemacht.
private void llb_ArztSerach_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
{
PointLinkLabel();
this.llb_ArztSerach.LinkColor = Color.Red;
if(SetPanelStatus("SearchArztForm") == false)
{
SearchArztForm frm = new SearchArztForm();
this.SearchPanel.Controls.Add(frm);
}
}
private bool SetPanelStatus(string sUserControl)
{
// Panel durchlaufen und prüfen ob das Userontrol
// sich in der Auflistung befindet. Wenn ja dann
// geben wir true zurück
bool bolMerker = false ;
foreach (Control c in SearchPanel.Controls)
{
if (c is UserControl)
{
//MessageBox.Show(c.Name);
if(c.Name.ToString() == sUserControl)
{
c.Visible = true;
bolMerker = true;
}
else
c.Visible = false;
}
}
return bolMerker;
}
Hallo cpetit,
ich würde das wie gesagt viel einfacher machen. Einfach das Control in einer Variable speichern und diese abfragen. Das durchsuchen der Control ist überflüssig.
herbivore