TListBox.Selectfirst

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

TListBox.Selectfirst

Beitrag von AlterMann »

Hallo

Ich habe ein merkwürdiges Phänomen:
Ich habe eine Variable namens AktiveLade vom Typ TListBox.
Gebe ich im Quelltext AktiveLade. ein und warte (wie ich es hier im Forum gelehrt wurde 8) ) erscheint als mögliche Auswahl u.a. SelectFirst.
Versuche ich die Procedure AktiveLade.Selectfirst jedoch auzurufen meckert der Compiler und behauptet: Error: identifier idents no member "SelectFirst"

hier die ganze Routine, vielleicht ist da ein Fehler zu erkennen:

Code: Alles auswählen

procedure TForm1.Button5Click(Sender: TObject);//Einzeln Entnehmen
 
var i, schondrin : word;
    AktiveLade : TlistBox;
    ALText : string;
 
begin
 for i:=0 to PageControl1.ActivePage.ControlCount-1 do
  if PageControl1.ActivePage.Controls[i] is TListBox then
    begin
     AktiveLade := TlistBox(PageControl1.ActivePage.Controls[i]);
     If (AktiveLade.GetSelectedText<> '') then
      begin
       ALText := Anzahlabschneiden(AktiveLade.GetSelectedText);
       schondrin := Anzahlextrahieren(AktiveLade.GetSelectedText);
      end;
    end;
 
 If (AktiveLade.GetSelectedText<> '') and (schondrin = 1) then
  begin
    AktiveLade.Items.Delete(AktiveLade.ItemIndex);
   AktiveLade.SelectFirst;
  end
   else
    If (AktiveLade.GetSelectedText<> '') then
    begin
     AktiveLade.Items.Delete(AktiveLade.ItemIndex);
     AktiveLade.Items.Add(Anzahlanfuegen(ALText,schondrin-1));
    end;
end;


Danke für die Aufmerksamkeit.
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: TListBox.Selectfirst

Beitrag von theo »

Diese Option sollte nicht angezeigt werden. Ist wohl ein Fehler. Das hätte aber sowieso nicht gemacht, was du wahrsch. wolltest.

Probier mal so:
if AktiveLade.Items.Count>0 then AktiveLade.Selected[0]:=true;

AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: TListBox.Selectfirst

Beitrag von AlterMann »

theo hat geschrieben:if AktiveLade.Items.Count>0 then AktiveLade.Selected[0]:=true;


Das funktioniert prächtig! (Wie immer, wenn Du was vorschlägst :P )

Nur zum Verständnis:
Warum sollte die Procedure nicht angezeigt werden bzw. bemäkelt sie der Compiler obwohl sie doch von TWinControl vererbt sein müßte?
Wieso meinst Du, hätte die Procedure nicht gemacht was ich wollte?

Ehrlich gesagt ich finde mich recht schwer in dem Dschungel aus Funktionen/Proceduren/und Properties zurecht.
Immer wenn ich denke ich hätte das System dahinter ein bißchen durchschaut, ist's wieder (ein bißchen) anders ... :cry:

Danke vielmals für Deine Hilfe.
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: TListBox.Selectfirst

Beitrag von theo »

AlterMann hat geschrieben:Warum sollte die Procedure nicht angezeigt werden bzw. bemäkelt sie der Compiler obwohl sie doch von TWinControl vererbt sein müßte?

Weil sie dort unter "protected" steht, also nur in abgeleiteten Klassen verwendet werden kann (weshalb der Compiler auch meckert)

AlterMann hat geschrieben:Wieso meinst Du, hätte die Procedure nicht gemacht was ich wollte?

Weil sie in TWinControl steht. TWinControl als Vorfahr weiss nichts von deinen TListBox.Items, kann als nicht das tun was du erwartest.

http://lazarus-ccr.sourceforge.net/docs ... first.html

AlterMann
Beiträge: 233
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: TListBox.Selectfirst

Beitrag von AlterMann »

theo hat geschrieben:Weil sie dort unter "protected" steht, also nur in abgeleiteten Klassen verwendet werden kann (weshalb der Compiler auch meckert)


Heißt das innerhalb einer Methode von TListBox könnte ich selectfirst aufrufen? (Wofür auch immer.)
theo hat geschrieben:Weil sie in TWinControl steht. TWinControl als Vorfahr weiss nichts von deinen TListBox.Items, kann als nicht das tun was du erwartest.


Das hätte ich mir eigentlich denken sollen ...

Danke schön.
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: TListBox.Selectfirst

Beitrag von theo »

AlterMann hat geschrieben:Heißt das innerhalb einer Methode von TListBox könnte ich selectfirst aufrufen? (Wofür auch immer.)


Dafür würde private reichen. protected Methoden kann man in abgeleiteten Klassen verwenden.
z.B. TMyListBox=class(TListBox) etc..

Der Bug ist übrigens bekannt:
http://bugs.freepascal.org/view.php?id=14499

Antworten