Laden...

Problem mit Panel

Erstellt von cpetit vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.173 Views
C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 16 Jahren
Problem mit Panel

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;
		}
M
190 Beiträge seit 2007
vor 16 Jahren

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.

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 16 Jahren

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.

M
190 Beiträge seit 2007
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

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

4.506 Beiträge seit 2004
vor 16 Jahren

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!”

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 16 Jahren

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;
		}
49.485 Beiträge seit 2005
vor 16 Jahren

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