TEdit-Arrays und OnChange()
-
Hallo,
ich lege zwei gleichgroße TEdit-Arrays zur Laufzeit an.
Nun möchte ich, wenn in ein Edit "edSatz[i]" des ersten Arrays etwas eingetippt wird, dass in dem Edit mit dem gleichen Index "edUmsatz[i]" des zweiten Arrays etwas ausgerechnet wird, z.B.: edUmsatz[i].Text = edSatz[i].Text * 70 (ohne Typumwandlungen).
Wie kann ich ein OnChange-Ereignis schreiben, in dem beide miteinander kommunizieren können?Danke,
Thomas
-
Im OnChange des "edSatz[i]"
edUmsatz[i].Text = edSatz[i].Text * 70 mit Typenumwandlung -> mit Text (String) kann man nicht rechnen
Wie kann ich ein OnChange-Ereignis schreiben, in dem beide miteinander kommunizieren können?
Sehe jetzt nicht, dass beide kommunizieren müsssen.
Sollten sie das doch müssen (beide OnChange zugleich aktiv) dann musst du in den jeweiligen OnChange Ereignissen das andere solange tot legen (auf Null setzen) sonst gibt's ärger
-
Ja, ich weiß, dass man Typumwandlung braucht, habe sie aber weggelassen, um es kurz zu fassen.
Mein Problem ist jetzt, dass immer wenn "i = TEdit(Sender).Tag" ausgeführt wird, i=0 rauskommt. Ich benutze das hier als OnChange()-Ereignis:void __fastcall TfrmControl::Edit1Change(TObject *Sender) { float fSatz; int i = TEdit(Sender).Tag; AnsiString sEdit = edSatz[i]->Text; if (sEdit != "") { try { fSatz = StrToFloat(sEdit); if (fSatz > 0) { float fHours = StrToFloat(lblTime[TEdit(Sender).Tag]->Caption); AnsiString sUmsatz = FloatToStr(fHours * fSatz); edSum[TEdit(Sender).Tag]->Text = sUmsatz; } } catch (Exception &E) { } } }Definiert und erzeugt werden die TEdit und TLabel Arrays so:
DynamicArray<TLabel*>lblProj; DynamicArray<TLabel*>lblTime; DynamicArray<TEdit*>edSatz; DynamicArray<TEdit*>edSum; void __fastcall TfrmControl::FormShow(TObject *Sender) { TADODataSet * ds = DB->dsRepProjects; AnsiString sql = TIMEENTRIES_SELECT_REP_PROJ_EMPLOYEE; // Zuerst Daten aus der Datenbank laden try { int i = 0; ds->Active=false; ds->CommandText = sql; ds->Parameters->Items[i++]->Value = pDT->TruncDay( DateFrom ); ds->Parameters->Items[i++]->Value = pDT->TruncDay( DateTo ) + TDateTime(1); ds->Parameters->Items[i++]->Value = PersonalNumber; ds->Active = true; } catch ( Exception &E ) { ShowMessage( E.Message ); } // ==>HIER WERDEN DIE ARRAYS GEFÜLLT!!!<== int iLength = ds->RecordCount; try { int i = 0; if (iLength > 0) { lblProj.Length = iLength; lblTime.Length = iLength; edSatz.Length = iLength; edSum.Length = iLength; } while (!ds->Eof) { lblProj[i] = new TLabel(this); lblProj[i]->Parent = this; lblProj[i]->Caption = ds->FieldByName("ProjectNumber")->AsString; lblProj[i]->Top = 32 * i + 56; lblProj[i]->Left = 8; lblProj[i]->Tag = i; lblProj[i]->Show(); lblTime[i] = new TLabel(this); lblTime[i]->Parent = this; lblTime[i]->Caption = ds->FieldByName("Expr1002")->AsString; lblTime[i]->Top = 32 * i + 56; lblTime[i]->Left = 120; lblTime[i]->Tag = i; lblTime[i]->Show(); edSatz[i] = new TEdit(this); edSatz[i]->Parent = this; edSatz[i]->Text = ""; edSatz[i]->Top = 32 * i + 48; edSatz[i]->Left = 240; edSatz[i]->Width = 73; edSatz[i]->Tag = i; edSatz[i]->Show(); edSatz[i]->OnChange = Edit1Change; edSum[i] = new TEdit(this); edSum[i]->Parent = this; edSum[i]->Text = ""; edSum[i]->Top = 32 * i + 48; edSum[i]->Left = 360; edSum[i]->Width = 81; edSum[i]->Tag = i; edSum[i]->Show(); i++; ds->Next(); } } catch ( Exception &E ) { ShowMessage( E.Message ); } }Die Tags werden in FormShow() erfolgreich aus gefüllt, dennoch gibt es den Fehler im OnChange()-Ereignis.
Sieht jemand meinen Fehler? Wieso ist das Tag jedes Edits, das OnChange() auslöst gleich 0? Ich vermute das liegt an "TEdit(Sender).Tag".Danke, Thomas

-
Hallo
int x = TEdit(Sender).Tag // falsch int y = static_cast<TEdit*>(Sender)->Tag // richtigbis bald
akari
-
Viel Dank, Akari.
