TEdit - Eingabe erzwingen bzw. abwarten



  • Hallo,

    Ich habe ein TEdit "Edit_ReportNo", in dem ich eine Eingabe für die nachfolgende Funktion benötige:

    ReportNo = Edit_ReportNo->Text;
    f_analyse (ReportNo);

    Mein Problem ist, dass keine Eingabe abgewartet wird, sondern gleich "f_analyse(ReportNo)" aufgerufen wird. Natürlich ohne einen korrekten Wert von "ReportNo".
    Weiß jemand, wie ich zunächst die Eingabe in die TEdit-Komponente erzwingen kann, bevor "f_analyse(ReportNo)" aufgerufen wird?

    Ulli



  • In welcher Funktion hast du denn bisher deinen Code stehen?

    Die VCL arbeitet ereignisorientiert, d.h. z.B. bei Anklicken eines Buttons (OnClick) oder Änderung eines Textes (OnChange) können Funktionen aufgerufen lassen werden, welche dann ausgeführt werden, s.a. Ereignisbehandlungsroutinen.



  • Vielen Dank für die fixe Antwort.
    Es handelt sich um ein TForm, die eine Funktion "f_Lese_und_Analysiere" aufruft:

    f_Lese_und_Analysiere
    {
    f_lese_folder (); // Liest ein Verzeichnis ein

    // Eingabe in Abhängigkeit der angezeigten Dateien
    ReportNo = Edit_ReportNo->Text;
    
    // Analyisiere die gewählte Datei in Abhängigkeit vom Inhalt "ReportNo"
    f_analyse (ReportNo);
    

    }

    "f_analyse" wird ausgeführt, bevor etwas eingegeben werden kann. Folglich kann der Inhalt von "ReportNo" auch nicht bei der Analyse genutzt werden.



  • Das mit dem Einrücken hat mal nicht so gut geklappt. Hier ein neuer Versuch.

    Vielen Dank für die fixe Antwort.
    Es handelt sich um eine TForm, die eine Funktion "f_Lese_und_Analysiere" aufruft:

    f_Lese_und_Analysiere ()
    {
         f_lese_folder (); // Liest ein Verzeichnis ein

    // Eingabe in Abhängigkeit der angezeigten Dateien
         ReportNo = Edit_ReportNo->Text;

    // Analyisiere die gewählte Datei in Abhängigkeit vom Inhalt "ReportNo"
         f_analyse (ReportNo);
    }

    "f_analyse" wird ausgeführt, bevor etwas bei "Edit_ReportNo->Text" eingegeben werden kann. Folglich kann der Inhalt von "ReportNo" auch nicht bei der Analyse genutzt werden.



  • Bist du immer noch nicht weitergekommen? Kannst du keinen Button für den Anwender hinzufügen?
    Dann kann der Anwender auch alternativ die Eingabetaste drücken, wenn dieser Button als Defaultder Form festgelegt ist:

    Der Benutzer drückt die EINGABETASTE, wenn das aktive Formular über eine Standardschaltfläche (angegeben in der Eigenschaft Default) verfügt.

    Ansonsten beschreibe mal genau den Ablauf (evtl. mit einem Screenshot auf eine externe Image-Hoster-Seite, z.B. imgur.com).
    Und wie rufst du die Form auf (modal oder nicht-modal)?

    PS: Für das Posten von Code gibt es extra hier im Foren-Editor den Button "</>".
    Oder du rückst jede Zeile mit (mindestens) 4 Leerzeichen ein.
    Du kannst auch noch nachträglich deine Beiträge editieren (Menü mit den drei Punkten: Bearbeiten).



  • Ich glaube dein Problem liegt im Programmablauf. Spätestens wenn du auf Benutzereingaben reagieren möchtest ist der Ablauf nicht mehr linear. Da du uns keinen Programmcode zeigst, aus dem man auf den Fehler schließen könnte, kann ich auch nur wild vermuten.

    void f_Lese_und_Analysiere()
    {
       f_lese_folder (); // Liest ein Verzeichnis ein
    
       // Eingabe in Abhängigkeit der angezeigten Dateien
       // => Wie soll der Benutzer denn hier etwas eingeben? Ist das Formular vorher angezeigt worden und der Benutzer konnte schon etwas eingeben? Wer ruft wann diese Funktion auf?
       ReportNo = Edit_ReportNo->Text;
    
       // Analyisiere die gewählte Datei in Abhängigkeit vom Inhalt "ReportNo"
       f_analyse (ReportNo);
    }
    

    Das kann so alles überhaupt nicht funktionieren, es sei denn, EditReportNo ist eine globale Variable (was ich nicht glaube), oder f_lese_folder() ist ein Member einer Formularklasse.

    Btw: Denglisch ist schrecklichst.


Anmelden zum Antworten