TObject *Sender übergeben
-
Servus zusammen,
ich habe 2 ListBoxen und beiden 1 PopupMenu zugeordnet. Nun möchte ich je nachdem welche Listbox ich angeglickt habe einen Eintrag aus dem Popupmenu auswählen und der ausgewählten hinzufügen. Ich habe es jetzt TObject *Sender
probiert. Allerdings habe ich Probleme den Wert in die richtige Listbox zu schreiben.
Deshalb meine Frage: Wie übergebe ich den Sender und rufe ihn hinterher in einer Funktion wieder auf ??Bisheriger Versuch:
void TEinstellungen::AddStandardEmails( TObject *Sender,AnsiString Adresse) { Sender->AddItem("Adresse"); //geht so nicht }
wie muss dieser Aufruf aussehen damit je nachdem von welcher Listbox die Funktion aufgerufen wird in diese geschrieben wird ??
FGGF
-
Im Abschnitt "Komponenten benutzen" der FAQ hats 2-3 Artikel die dir die Verwendung von "Sender" näher bringen dürften... (u.A. Sendernamen identifizieren, etc.)
-junix
-
Hallo,
Sender ist ja vom Typ TObject. Du muss das erst per dynamic_cast in TListBox casten (auf NULL prüfen). Dann kannst du was hinzufügen. Da gibts aber mit Sicherheit Einträge in der FAQ.
z.Bsp. ist hier http://www.c-plusplus.net/forum/viewtopic.php?t=39210 etwas ähnliches.[edit]Da war ich wohl zu spät[/edit]
Ciao
-
Wenn ich Dich richtig verstanden habe:
1. einen Zeiger vom Typ TListBox definieren (am Besten private)
2. je nachdem, welche ListBox geklickt wurde -> Ergebnis im private-Zeiger hinterlegen
3. bei OnClick im Popup den private-Zeiger abfragen
-
Sorry Leute ich kriegs irgendwie nicht hin. Ich glaub ich bin zu doof dafür.
Also ich habe 2 ListBoxen, beide rufen das gleiche Popupmenu auf.
Der Listbox die das Popumenu aufgerufen hat soll ein Text hinzugefügt werden.
Ich hatte das alles mit 2 Popupmenus schon. Ist aber umständlich und mein Chef will das mit einem realisiert haben. Ich habe eine Funktion geschrieben der ein AnsiString und der Sender übergeben wird.void TEinstellungen::AddStandardEmails(TObject *Sender,AnsiString Adresse) { dynamic_cast <TListBox*>(Sender)->Name; if(Sender==LBEmailAdressen) LBEmailAdressen->Items->Add(Adresse); if(Sender==LBSpezialEmailAdressen) LBSpezialEmailAdressen->Items->Add(Adresse); }
Aber irgendwie raff ichs echt net. Trotz FAQ und Hilfe.
Bin ich doof ??
FGGF
-
The Godfather schrieb:
Ich glaub ich bin zu doof dafür.
Nö, stehst nur etwas aufm Schlauch (o;
void TEinstellungen::AddStandardEmails(TObject *Sender,AnsiString Adresse) { TListBox *Box_TLBp = dynamic_cast <TListBox*>(Sender); if (Box_TLBp != NULL) //Unbedingt auf NULL prüfen... { Box_TLBp->Items->Add(Adresse); } }
-junix
-
Hallo,
Du castest da unten ja nichts. Bloss mal als Bsp.
TListBox *lbox = dynamic_cast<TListBox *>(Sender); if( lbox != NULL) { // tu irendwas }
[edit]Schon wieder zu spät!
[/edit]
-
Ich begreifs nicht. Tut mir leid.
void__fastcall TEinstellungen::Button1Click(TObject *Sender) { AddStandardEmails(Sender,"wasweissich@nix.de"); }
void TEinstellungen::AddStandardEmails(TObject *Sender,AnsiString Adresse) { TListBox *Name= dynamic_cast <TListBox*>(Sender); if(Name!=NULL) { Name->Items->Add(Adresse); } }
Name ist in der Headerdatei als TListBox *Name deklariert.
Das Problem ist jetzt egal von welcher ListBox aus ich das Popupmenu, oder den Button aufrufe, der Text wird immer in die gleiche ListBox geschrieben.
Hab ich was übersehen oder falsch gemacht ??FGGF
Tut mir leid für euren vielen Mühen.
-
Wieso denn jetzt den Sender eines Button-Events?!? Ja so geht das natürlich nicht. Da muss Sender schon eine Listbox sein..
Ich glaub du bastelst da an was vorbei.... Was willst du denn exakt?
-junix
-
Vielleicht hab ich mich ja falsch ausgedrückt. Sorry.
Ich habe zwei TListBoxen ein Popumenu zugeordnet. In dem PopupMenu gibts es verschiedene Einträge (Emailadressen) die je nachdem der linken oder rechten Listbox hinzugefügt werden soll. Abhängig vom Aufruf des Popumenus von der jeweiligen ListBox. Die Sache mit dem Button war Shit, okay mein Fehler.
FGGF
-
Hab geschafft. Hab bei den TListboxen bei OnEnter einen fiktive ListBox gesetzt.
void __fastcall TEinstellungen::LBSpezialEmailAdressenClick( TObject *Sender) { this->Name=dynamic_cast<TListBox *>(Sender); }
und dann später einfach den Pointer abgefragt, nachdem das Popupmenu dynamisch
erzeugt wurde.void __fastcall TEinstellungen::PopupMenuItemsClick(TObject *Sender) { AnsiString EmailAdresse=""; // TIniFile *ini; // ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" )); TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>(Sender); if (ClickedItem) EmailAdresse=(ini->ReadString("Popup",ClickedItem->Caption,"failed")); if(Name!=NULL) Name->Items->Add(EmailAdresse); if(ini) delete ini; }
Danke nochmal an alle die mir auf die Sprünge geholfen haben. War ne schwere Geburt für mich. :p