TListView



  • hab ein Problem mit der TListView und einen dazugehörigen Event OnEdited.

    In der Hilfe steht: "Tritt ein, unmittelbar nachdem der Benutzer die Eigenschaft Caption eines Eintrags geändert hat."

    Bei leerer Caption wird diese Funktion nicht ausgeführt.
    Wie kann man denn jetzt überprüfen was eingegeben wurde ? 😞

    void __fastcall TForm1::ListView1Edited(TObject *Sender, TListItem *Item, UnicodeString &S)
    {
       ;// bei leerem Eintrag wird diese Funktion nicht ausgeführt
       ;// das Item jedoch wird angelegt
    }
    


  • (Aladin) schrieb:

    Bei leerer Caption wird diese Funktion nicht ausgeführt

    Kann ich hier (XE4) nicht nachvollziehen; sowohl nach dem Löschen einer Caption als auch nach Eingabe in eine zuvor leere Caption wird OnEdited ausgelöst.



  • hab auch Xe4 und es geht nicht.
    Hier kann man leicht nachvollziehen, neues Projekt starten dann TButton und TListView auf die Form und compilieren. Dann den Button drücken und ohne Eingabe mit Enter fortsetzen, es passiert nix solange die Caption leer ist, aber das Item wird angelegt.

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    	ListView1->ViewStyle = vsReport;
    	ListView1->Width = 230;
    	ListView1->Columns->Add();
    	ListView1->Column[0]->Caption = "Text";
    	ListView1->Column[0]->Width = 200;
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	TListItem *mItem;
    	mItem = ListView1->Items->Add();
    	mItem->EditCaption();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ListView1Edited(TObject *Sender, TListItem *Item, UnicodeString &S)
    
    {
    	ShowMessage("OnEdited");
    }
    //---------------------------------------------------------------------------
    


  • Ahh, jetzt sehe ich, was du meinst. Das dürfte gewolltes Verhalten sein, denn wenn keine Eingabe erfolgt, dann hat ja auch kein Edit stattgefunden.
    Du hast sicher bemerkt, dass, sobald ein beliebiges Zeichen eingegeben oder geändert wurde, OnEdit auch dann feuert, wenn die Eingabe rückgängig gemacht wurde. Das Ganze ist übrigens unabhängig davon, ob Caption leer ist oder Zeichen enthält.

    Insofern sehe ich auch kein Problem: solange OnEdit nicht ausgelöst wird, steht doch fest, dass die Item-Caption leer ist bzw. den von dir vorgegebenen Wert enthält.



  • mmm so ganz schnall ich das nicht was du meinst mit eingabe rückgängig machen ?

    wenn die caption leer ist, kann ich mit dem Item nichts anfangen, es wird also völlig sinnlos angelegt, leider weiss ich das nicht zu verhindern.



  • (Aladin) schrieb:

    mmm so ganz schnall ich das nicht was du meinst mit eingabe rückgängig machen ?

    Die eingegebenen Zeichen löschen, mit Backspace oder Delete-Taste, rechte Mautaste, STRG+Z etc. pp.

    wenn die caption leer ist, kann ich mit dem Item nichts anfangen, es wird also völlig sinnlos angelegt, leider weiss ich das nicht zu verhindern.

    Du legst das Item doch selber an, dann setz dabei halt auch eine Default-Caption.
    mItem->Caption = "bla"



  • Hast recht das funzt wirklich, selbst wenn man die default Caption dann herauslöscht geht er sogar in OnEdit rein. Jetzt ist alles gut. 🙂 Danke man.



  • Nochmals DANKE Jansen !!!


Anmelden zum Antworten