Benutzer mit den meisten Antworten
Labels für Klick unsichtbar - für Benutzer sichtbar

Frage
-
Hallo User,
ich sitze momentan an einem Programm, in welchem ich mehrere Panel für eine MAP angeordnet habe...
sagen wir mal wie ein Schachbrett. Jedes feld des Schachbretts (jedes Panel) besitzt eine eigene Nummer. Dafür habe ich jeweils ein Label über das Panel platziert. Das Problem ist nur, wenn der Benutzer genau auf die Nummer klickt, passiert natürlich nichts, weil ich kein label.click-event formuliert habe.
Besteht die Möglichkeit, dass man bei Click aufs Label sozusagen aufs Panel klickt?
Also alle Labels für Clicks "unsichtbar", aber für den Benutzer sichtbar zu machen?
Ich bedanke mich im vorraus für jegliche Antworten :-)
Antworten
-
Hi,
hast du die Labels manuell auf das Panel platziert oder über Code? Anbei ein bisschen Code zum ausprobieren :-)
for (int i = 0; i < 10; i++) { Label lbl = new Label(); lbl.BorderStyle = BorderStyle.FixedSingle; lbl.BackColor = i % 2 == 0 ? Color.LightGray : Color.White; lbl.AutoSize = false; lbl.Width = 50; lbl.Height = 50; lbl.Location = new Point(i * 50, 0); lbl.Visible = true; lbl.Text = i.ToString(); lbl.TextAlign = ContentAlignment.MiddleCenter; lbl.Click += lbl_Click; //Hier der Eventhandler this.Controls.Add(lbl); } void lbl_Click(object sender, EventArgs e) { // das Objekt welches sendet sollte ein Label sein Label lbl = sender as Label; if (lbl != null) { // Wenn der Sender ein Label ist, dann unsichtbar machen lbl.Visible = false; } }
- Als Antwort markiert Abdel1992 Mittwoch, 20. Januar 2016 15:55
-
Hallo,
wenn die Panels nicht noch eine ganz besondere Funktion übernehmen sollen, hätte ich die gar nicht erst verwendet. Du kannst auch auf ein Label klicken und dieses Ereignis notieren. Wenn du beim Label die "AutoSize"-Eigenschaft auf "false" setzt, kannst du damit auch schöne Quadrate erzeugen, den Hintergrund einfärben, beschriften und so weiter.
Oder sollen die Panel noch spezielle Aufgaben übernehmen?
Du kannst Label auch bequem per Code erzeugen...
Gruß
-
Wir haben ja zu Beginn alle Labels in die Controls der Form eingetragen. Beim aufruf deiner Funktion, kannst du alle Controls der Form durchpollen und prüfen ob es sich um ein Label handelt.
foreach (Control item in this.Controls) { Label lbl = item as Label; if (lbl != null) // Handelt es sich um eine Label-Control, dann ist hier nicht NULL { if (lbl.Text == "2") // Jetzt prüfen wir ob es sich bei dem Label um eins mit dem Text == "2" handelt { lbl.BackColor = Color.Red; // Wenn ja, dann Farbe von genau dem Controll ändern welches den Text "2" // beinhaltet! Hast du mehrere Labels mit dem gleichen Text, werden alle geändert! } } }
Hoffe es klappt bei dir :-)
- Bearbeitet David Stania Dienstag, 9. Februar 2016 14:27
- Als Antwort markiert Abdel1992 Dienstag, 9. Februar 2016 14:58
Alle Antworten
-
Hi,
hast du die Labels manuell auf das Panel platziert oder über Code? Anbei ein bisschen Code zum ausprobieren :-)
for (int i = 0; i < 10; i++) { Label lbl = new Label(); lbl.BorderStyle = BorderStyle.FixedSingle; lbl.BackColor = i % 2 == 0 ? Color.LightGray : Color.White; lbl.AutoSize = false; lbl.Width = 50; lbl.Height = 50; lbl.Location = new Point(i * 50, 0); lbl.Visible = true; lbl.Text = i.ToString(); lbl.TextAlign = ContentAlignment.MiddleCenter; lbl.Click += lbl_Click; //Hier der Eventhandler this.Controls.Add(lbl); } void lbl_Click(object sender, EventArgs e) { // das Objekt welches sendet sollte ein Label sein Label lbl = sender as Label; if (lbl != null) { // Wenn der Sender ein Label ist, dann unsichtbar machen lbl.Visible = false; } }
- Als Antwort markiert Abdel1992 Mittwoch, 20. Januar 2016 15:55
-
Hi,
hast du die Labels manuell auf das Panel platziert oder über Code? Anbei ein bisschen Code zum ausprobieren :-)
for (int i = 0; i < 10; i++) { Label lbl = new Label(); lbl.BorderStyle = BorderStyle.FixedSingle; lbl.BackColor = i % 2 == 0 ? Color.LightGray : Color.White; lbl.AutoSize = false; lbl.Width = 50; lbl.Height = 50; lbl.Location = new Point(i * 50, 0); lbl.Visible = true; lbl.Text = i.ToString(); lbl.TextAlign = ContentAlignment.MiddleCenter; lbl.Click += lbl_Click; //Hier der Eventhandler this.Controls.Add(lbl); } void lbl_Click(object sender, EventArgs e) { // das Objekt welches sendet sollte ein Label sein Label lbl = sender as Label; if (lbl != null) { // Wenn der Sender ein Label ist, dann unsichtbar machen lbl.Visible = false; } }
Hi,
erstmal danke für deine schnelle Antwort.
Also ich glaube es kam nicht ganz richtig rüber. In deinem Programm verschwindet ja der ganze Kasten direkt.
Bei mir verfärbt sich dieser Panel und das Label soll auch bleiben. Das Label, soll nur "für den Click" unsichtbar sein.
Das heißt wenn ich auf die 1 klicke, möchte ich eigentlich auf das Panel klicken.
Ich habe die Zahlen per Drag and Drop eingefügt, da mein Muster nicht ganz gleichverteilt ist.
Mit vielen Grüßen
Faris
-
In meinem nächsten Projekt werde ich es so machen wie du. Leider habe ich es jetzt so umständlich gemacht... aber möchte es gerne so zu Ende führen... sonst war alles umsonst :'(
Bei mir sieht es so aus, ist leider umständlich per Code zu machen bzw. bin ich noch nicht erfahren genug, um das per Code zu lösen...
-
Hallo,
wenn die Panels nicht noch eine ganz besondere Funktion übernehmen sollen, hätte ich die gar nicht erst verwendet. Du kannst auch auf ein Label klicken und dieses Ereignis notieren. Wenn du beim Label die "AutoSize"-Eigenschaft auf "false" setzt, kannst du damit auch schöne Quadrate erzeugen, den Hintergrund einfärben, beschriften und so weiter.
Oder sollen die Panel noch spezielle Aufgaben übernehmen?
Du kannst Label auch bequem per Code erzeugen...
Gruß
-
Hallo David Stania,
benutze jetzt deine Vorgehensweise für die Labels. Dazu hätte ich noch eine Frage.
Und zwar möchte ich die Labels auch von einer anderen Funktion aus bearbeiten können.
Sie sollen Ihre Farbe ändern, bei hochladen einer Datei. Leider kann ich auf die Variable lbl nicht zugreifen.
Vielleicht hast du ja eine Idee.
Viele Grüße
Faris
-
Hallo David,
also es gibt ein zweidimensionales Array, welche in der ersten Spalte eine Nummer und in der zweite einen Status beinhaltet.
Eine .txt-Datei wird hochgeladen und in dieses Array gespeichert.
Die Elemente in der ersten Spalte entsprechen dem lbl.text.
Also als Beispiel (in einer anderen Funktion):
if(FinalArray11A[z, 1] == "TEST")
{
lbl.BackColor = Color.DarkRed // HIER MÖCHTE ICH AUF GENAU DAS LABEL MIT DEM TEXT "Form1.FinalArray11A[z, 1]" ZUGREIFEN UND DESSEN FARBE ÄNDERN
}
Irgendwie muss ich den Text des Labels finden und dann genau dieses Label bearbeiten.
zB. für "FinalArray11A[z, 1] == 88" --> das Label mit lbl.Text = 88 soll Gefärbt werden.
Vielen Dank schonmal im voraus
-
Wir haben ja zu Beginn alle Labels in die Controls der Form eingetragen. Beim aufruf deiner Funktion, kannst du alle Controls der Form durchpollen und prüfen ob es sich um ein Label handelt.
foreach (Control item in this.Controls) { Label lbl = item as Label; if (lbl != null) // Handelt es sich um eine Label-Control, dann ist hier nicht NULL { if (lbl.Text == "2") // Jetzt prüfen wir ob es sich bei dem Label um eins mit dem Text == "2" handelt { lbl.BackColor = Color.Red; // Wenn ja, dann Farbe von genau dem Controll ändern welches den Text "2" // beinhaltet! Hast du mehrere Labels mit dem gleichen Text, werden alle geändert! } } }
Hoffe es klappt bei dir :-)
- Bearbeitet David Stania Dienstag, 9. Februar 2016 14:27
- Als Antwort markiert Abdel1992 Dienstag, 9. Februar 2016 14:58