Autor Beitrag
timo12
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 18.03.10 18:20 
Ich habe ein Phänomen, bei dem ich nicht weiß ob ich zu blöd bin, oder ich zu blöd bin.


Ich habe von DevComponents eine Gallerycollection in der sich ein Buttonitem befindet. Dieses Buttonitem hat 1 Subitem welches auch ein ButtinItem ist. Dem Subitem gebe ich als Tag eine GUID. Nun verknüpfe ich noch ganz braf das Click Event mit einer Funktion. Frage ich dort den Tag ab, ist er leer.

Hier füge ich dem Button das Subitem hinzu:
ausblenden C#-Quelltext
1:
2:
3:
4:
 ButtonItem _btnsub = new ButtonItem("btnlöschen""Liste löschen");
 _btnsub.Click += new EventHandler(ListenOptionen_Click);
 _btnsub.Tag = _l.ID.ToString();
 _btn.SubItems.Add(_btnsub);

Und hier mein ListenOptionen_Click:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 void ListenOptionen_Click(object sender, EventArgs e)
        {
            DevComponents.DotNetBar.ButtonItem _bi = (ButtonItem)sender;
            MessageBox.Show(_bi.Tag.ToString());
        }

Und hier ist das Ergebnis "".

Kann mir jemand sagen warum?



Gruß Timo
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 18.03.10 18:36 
Hallo,

ich setze mal voraus, dass der sender wirklich das Subitem ist, das den Tag bekommen hat. Das wirst du vermutlich mehrfach hin und her geprüft haben.

user profile icontimo12 hat folgendes geschrieben Zum zitierten Posting springen:
Dem Subitem gebe ich als Tag eine GUID.

Falsch. Du weist dem Tag einen String zu. Aber du kannst die GUID doch direkt zuweisen:
ausblenden C#-Quelltext
1:
  _btnsub.Tag = _l.ID;					

Bei der Abfrage musst du dann nur konvertieren (sicherheitshalber mit Prüfung):
ausblenden C#-Quelltext
1:
2:
3:
4:
            DevComponents.DotNetBar.ButtonItem _bi = (ButtonItem)sender;
            GUID id = _bi.Tag as GUID;
            if (id != null)
               MessageBox.Show(_bi.Tag.ToString());


user profile icontimo12 hat folgendes geschrieben Zum zitierten Posting springen:
Nun verknüpfe ich noch ganz braf das Click Event mit einer Funktion. Frage ich dort den Tag ab, ist er leer.

Da ToString immer einen Wert liefert und bei einer GUID natürlich die übliche String-Darstellung ergeben soll, vermute ich sehr stark, dass bereits bei der Zuweisung die ID nicht mit Inhalt gefüllt ist, sondern den Standardwert Empty enthält oder gar nicht als GUID, sondern als Int32 definiert ist.

Hast du alle Werte per Debugger geprüft? Jürgen
timo12 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 18.03.10 18:42 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

ich setze mal voraus, dass der sender wirklich das Subitem ist, das den Tag bekommen hat. Das wirst du vermutlich mehrfach hin und her geprüft haben.

Hast du alle Werte per Debugger geprüft? Jürgen


Ja habe ich und wenn ich den Button.Subitems[0].Tag abfrage, bekomme ich die GUID bzw. den String davon auch ausgeworfen. Nur wenn ich auf oben beschriebenen Wege mache (was ich ja muss, weil ich ja nur dann weiß wann und auf welchen Button geklickt wurde) ist die GUID bzw. der Text davon weg.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 18.03.10 18:48 
Probier es doch mal mit einem Standard-Control aus.

Direkt abfragen ist natürlich noch sicherer. Es klingt schon mysteriös.

Was sagt denn im Click-Event sender.GetType(), _bi.GetType(), kannst du _bi anhand des Namens oder so identifizieren?

Jürgen
timo12 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 18.03.10 19:22 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Probier es doch mal mit einem Standard-Control aus.

Direkt abfragen ist natürlich noch sicherer. Es klingt schon mysteriös.

Was sagt denn im Click-Event sender.GetType(), _bi.GetType(), kannst du _bi anhand des Namens oder so identifizieren?

Jürgen


Ja, es ist das richtige Control
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 18.03.10 19:52 
Dann fällt mir nur noch ein, per Reflector zu prüfen, wie im ButtonItem der Tag registriert wird. Jürgen
timo12 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 19.03.10 08:06 
Habe das Problem gelöst. Habe alle Verweise auf die Komponente gelöscht und neu gesetzt, und oh Wunder dann hat es funktioniert.