Spinedit - Wert eines anderen Controls abfragen



  • Hallo

    Um die OnChange-Events wirst du nicht umhinkommen, den genau dafür sind sie da. Aber es sollte möglich sein, alle SpinCtrls auf eine Eventmethode verweisen zu lassen. Zur Identifikation kannst du dann den Parameter Sender einsetzen.

    bis bald
    akari



  • Hallo,

    in OnChange setzt du den MaxValue des SpinEdit auf seinen aktuellen Wert, also zB

    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Spin1Change(TObject *Sender)
    {
        left = 0;
        for ( int i = 1; i <= 5; i++) {
            TCSpinEdit* spin;
            spin = dynamic_cast<TCSpinEdit*>(Form1->FindComponent("Spin" + IntToStr(i)));
            left    += spin->Value;
            spin->MaxValue = spin->Value;   // hier MaxValue neu festlegen
    
        }
        stxtPointsLeft->Caption =  IntToStr(left);
    }
    

    Edit:
    @akari, sry, hab nicht mit deinem Posting gerechnet. 😉



  • @kpeter

    Aber damit wird ja left immer wieder erhöht, da hier ja der Wert immer wieder addiert wird. Wenn ich z.b. einen Wert 100 habe und diesen Wertmäßig auf die Spins verteilen will, würde ich den maximalen Wert von 100 mit nur ein paar klicks erreichen 😉

    Das ist aber "eigentlich" nicht gewollt 😃

    OK, ich vermute mal das meine Fragestellung vielleicht nicht ganz so rüber kommt wie ich gehofft habe - dann versuche ich es nochmal besser:

    Also:

    In einem Label steht ein Wert, z.b. 100. Diesen Wert möchte ich auf 5 SpinEdits verteilen, wobei jedes Spinedit einen individuellen Wert haben kann, solange die 100 ingesamt (von allen Spins zusammen) nicht überschritten wird.

    Z.b. könnte Spin1 den Wert 30 haben, Spin2 60, Spin3 5, Spin4 0, Spin5 5.



  • würde mir ne Funktion bauen, die im OnChange aufgerufen wird und das entspr. Edit anpasst.
    Also alle SpinEdits ausser akt. ++, dann aktuelles = 100 - alle.

    kurz mal aus der Hüfte geschossen 🙂

    grüssle 🙂



  • @smitty

    Das war meine erste Idee, die funktioniert aber nicht so ganz da ich hier nicht weiss wie ich den MaxValue berechnen kann für die SpinEdits.

    Ich habs zwar schon soweit hinbekommen gehabt das ich den max. Wert nicht überschreiten kann, aber die Spinedits selbst konnte ich noch erhöhen - und das will ich ja eben nicht.



  • SpinEdit->MaxValue = ???

    grüssle 🙂



  • Smitty schrieb:

    SpinEdit->MaxValue = ???

    grüssle 🙂

    Du hast die anderen Posts nicht wirklich gelesen, oder?



  • Hi,

    Annahme:
    Du hast einen maximalen Wert von 100 , und alle Werte der 5 SpinEdits zusammen müssen diese Summe bilden.
    Verminderst du jetzt einen Wert, vergrössert sich zwangsweise der Wert von mindestens einem anderen SpinEdit. Die Summe soll ja 100 bleiben.

    Insofern kann dein Plan nicht aufgehen.



  • kpeter schrieb:

    Hi,

    Annahme:
    Du hast einen maximalen Wert von 100 , und alle Werte der 5 SpinEdits zusammen müssen diese Summe bilden.
    Verminderst du jetzt einen Wert, vergrössert sich zwangsweise der Wert von mindestens einem anderen SpinEdit. Die Summe soll ja 100 bleiben.

    Insofern kann dein Plan nicht aufgehen.

    Warum? Der Wert beim vermindern von SpinEditX muss ja nicht einem anderen Spinedit zugewiesen werden sondern ist eben wieder 'frei'.



  • Du brauchst doch nur im Change-Event abfragen, ob du die Gesamtsumme (über alle SpinEdits) erreicht hast.
    Wenn ja, dann jeweils

    SpinEditX->MaxValue = SpinEditX->Value;
    

    Und wenn noch nicht, dann

    SpinEditX->MaxValue = 100; // bzw. alternativ: SpinEditX->Value + 1 (da es ja immer wieder angepaßt wird)
    


  • Th69 schrieb:

    Du brauchst doch nur im Change-Event abfragen, ob du die Gesamtsumme (über alle SpinEdits) erreicht hast.
    Wenn ja, dann jeweils

    SpinEditX->MaxValue = SpinEditX->Value;
    

    Und wenn noch nicht, dann

    SpinEditX->MaxValue = 100; // bzw. alternativ: SpinEditX->Value + 1 (da es ja immer wieder angepaßt wird)
    

    Jetzt gehts, danke!


Anmelden zum Antworten