|
| Selecte samme i flere TListBoxe ? Fra : Ulrik Vadstrup |
Dato : 17-08-02 18:04 |
|
Jeg har flere tListBox'e som "følges" ad, der for vil jeg gerne
selecte/highlighte det samme item, nå jeg trykker på en af dem, jeg har
lavet følgende:
procedure TfrmMain.pSelectSame(const iCaller: TListBox);
var
i, j:Integer;
begin
For i := 0 to iCaller.Items.Count-1 do
if iCaller.Selected[i] Then
Begin
for j := 0 to frmMain.ComponentCount-1 do
If (frmMain.Components[j] is TListBox) AND (frmMain.Components[j] <>
iCaller) Then
TListBox(frmMain.Components[j]).Selected[i] := True;
end;
end;
Som jeg kører på en MouseUp hændelse, men der giver fejl, "Out of bounds 0"
Hva gør jeg galt, skal jeg give Focus først ?
--
Med venlig hilsen
Ulrik Vadstrup
| |
Harald (17-08-2002)
| Kommentar Fra : Harald |
Dato : 17-08-02 22:05 |
|
"Ulrik Vadstrup" <blackend@blackend.dk> skrev i en meddelelse
news:3d5e827b$0$94825$edfadb0f@dspool01.news.tele.dk...
> Jeg har flere tListBox'e som "følges" ad, der for vil jeg gerne
> selecte/highlighte det samme item, nå jeg trykker på en af dem, jeg har
> lavet følgende:
>
> procedure TfrmMain.pSelectSame(const iCaller: TListBox);
> var
> i, j:Integer;
> begin
> For i := 0 to iCaller.Items.Count-1 do
> if iCaller.Selected[i] Then
> Begin
> for j := 0 to frmMain.ComponentCount-1 do
> If (frmMain.Components[j] is TListBox) AND (frmMain.Components[j]
<>
> iCaller) Then
> TListBox(frmMain.Components[j]).Selected[i] := True;
> end;
> end;
>
> Som jeg kører på en MouseUp hændelse, men der giver fejl, "Out of bounds
0"
>
> Hva gør jeg galt, skal jeg give Focus først ?
Jeg gætte på at en af dine ListBoxe er tom så derfor giver denne linie
fejlen:
TListBox(frmMain.Components[j]).Selected[i] := True;
Mvh
HK
| |
Ulrik Vadstrup (18-08-2002)
| Kommentar Fra : Ulrik Vadstrup |
Dato : 18-08-02 10:43 |
|
"Harald" <swobu@kroning.dk> wrote in message
news:3d5eba7f$0$94809$edfadb0f@dspool01.news.tele.dk...
> "Ulrik Vadstrup" <blackend@blackend.dk> skrev i en meddelelse
> news:3d5e827b$0$94825$edfadb0f@dspool01.news.tele.dk...
> > Jeg har flere tListBox'e som "følges" ad, der for vil jeg gerne
> > selecte/highlighte det samme item, nå jeg trykker på en af dem, jeg har
> > lavet følgende:
> >
> > procedure TfrmMain.pSelectSame(const iCaller: TListBox);
> > var
> > i, j:Integer;
> > begin
> > For i := 0 to iCaller.Items.Count-1 do
> > if iCaller.Selected[i] Then
> > Begin
> > for j := 0 to frmMain.ComponentCount-1 do
> > If (frmMain.Components[j] is TListBox) AND (frmMain.Components[j]
> <>
> > iCaller) Then
> > TListBox(frmMain.Components[j]).Selected[i] := True;
> > end;
> > end;
> >
> > Som jeg kører på en MouseUp hændelse, men der giver fejl, "Out of bounds
> 0"
> >
> > Hva gør jeg galt, skal jeg give Focus først ?
>
> Jeg gætte på at en af dine ListBoxe er tom så derfor giver denne linie
> fejlen:
> TListBox(frmMain.Components[j]).Selected[i] := True;
>
> Mvh
> HK
Ja, den havde jeg ikke lige tænkt på, ved ikke hellt om det er tilfældet,
men jeg laver et check på Items.Count > 0, så ser jeg om det hjælper
Takker
Ulrik
| |
Ulrik Vadstrup (18-08-2002)
| Kommentar Fra : Ulrik Vadstrup |
Dato : 18-08-02 12:45 |
|
"Ulrik Vadstrup" <blackend@blackend.dk> wrote in message
news:3d5f6c8b$0$94763$edfadb0f@dspool01.news.tele.dk...
> "Harald" <swobu@kroning.dk> wrote in message
> news:3d5eba7f$0$94809$edfadb0f@dspool01.news.tele.dk...
> > "Ulrik Vadstrup" <blackend@blackend.dk> skrev i en meddelelse
> > news:3d5e827b$0$94825$edfadb0f@dspool01.news.tele.dk...
> > > Jeg har flere tListBox'e som "følges" ad, der for vil jeg gerne
> > > selecte/highlighte det samme item, nå jeg trykker på en af dem, jeg
har
> > > lavet følgende:
> > >
> >
> > Jeg gætte på at en af dine ListBoxe er tom så derfor giver denne linie
> > fejlen:
> > TListBox(frmMain.Components[j]).Selected[i] := True;
> >
> > Mvh
> > HK
>
> Ja, den havde jeg ikke lige tænkt på, ved ikke hellt om det er tilfældet,
> men jeg laver et check på Items.Count > 0, så ser jeg om det hjælper
>
> Takker
>
> Ulrik
>
Nej, ingen held, nu har jeg lavet følgende :
procedure TfrmMain.pSelectSame(const iCaller: TListBox);
var
i, j:Integer;
begin
For i := 0 to iCaller.Items.Count-1 do
if iCaller.Selected[i] Then
Begin
for j := 0 to frmMain.ComponentCount-1 do
If (frmMain.Components[j] is TListBox) AND (frmMain.Components[j] <>
iCaller) AND
(TListBox(frmMain.Components[j]).Items.count > 0) Then
Begin
frmMain.ActiveControl := TListBox(frmMain.Components[j]);
TListBox(frmMain.Components[j]).Selected[i] := True;
end;
end;
end;
Jeg laver Selected på 0 som har en tekst i alle listboxe
Og får stadig fejl - nogen der kan gennemskue den ?
Mvh
Ulrik
| |
Harald (18-08-2002)
| Kommentar Fra : Harald |
Dato : 18-08-02 19:08 |
|
"Ulrik Vadstrup" <blackend@blackend.dk> skrev i en meddelelse
news:3d5f8920$0$94747$edfadb0f@dspool01.news.tele.dk...
> "Ulrik Vadstrup" <blackend@blackend.dk> wrote in message
> news:3d5f6c8b$0$94763$edfadb0f@dspool01.news.tele.dk...
> > "Harald" <swobu@kroning.dk> wrote in message
> > news:3d5eba7f$0$94809$edfadb0f@dspool01.news.tele.dk...
> > > "Ulrik Vadstrup" <blackend@blackend.dk> skrev i en meddelelse
> > > news:3d5e827b$0$94825$edfadb0f@dspool01.news.tele.dk...
> > > > Jeg har flere tListBox'e som "følges" ad, der for vil jeg gerne
> > > > selecte/highlighte det samme item, nå jeg trykker på en af dem, jeg
> har
> > > > lavet følgende:
> > > >
> > >
> > > Jeg gætte på at en af dine ListBoxe er tom så derfor giver denne linie
> > > fejlen:
> > > TListBox(frmMain.Components[j]).Selected[i] := True;
> > >
> > > Mvh
> > > HK
> >
> > Ja, den havde jeg ikke lige tænkt på, ved ikke hellt om det er
tilfældet,
> > men jeg laver et check på Items.Count > 0, så ser jeg om det hjælper
> >
> > Takker
> >
> > Ulrik
> >
> Nej, ingen held, nu har jeg lavet følgende :
>
> procedure TfrmMain.pSelectSame(const iCaller: TListBox);
> var
> i, j:Integer;
> begin
> For i := 0 to iCaller.Items.Count-1 do
> if iCaller.Selected[i] Then
> Begin
> for j := 0 to frmMain.ComponentCount-1 do
> If (frmMain.Components[j] is TListBox) AND (frmMain.Components[j]
<>
> iCaller) AND
> (TListBox(frmMain.Components[j]).Items.count > 0) Then
> Begin
> frmMain.ActiveControl := TListBox(frmMain.Components[j]);
> TListBox(frmMain.Components[j]).Selected[i] := True;
> end;
> end;
> end;
>
> Jeg laver Selected på 0 som har en tekst i alle listboxe
>
> Og får stadig fejl - nogen der kan gennemskue den ?
Jeg har smidt 3 listboxe ind på en form, fyldt samme antal linier i hver af
dem og har så prøvet med begge dine procedurer og de virker fint her.
Er det stadig "Out of bounds 0" fejlen du får?
Hvordan kalder du proceduren pSelectSame?
Mvh
HK
| |
Ulrik Vadstrup (19-08-2002)
| Kommentar Fra : Ulrik Vadstrup |
Dato : 19-08-02 14:14 |
|
"Harald" <swobu@kroning.dk> wrote in message
news:3d5fe280$0$27666$edfadb0f@dspool01.news.tele.dk...
> Jeg har smidt 3 listboxe ind på en form, fyldt samme antal linier i hver
af
> dem og har så prøvet med begge dine procedurer og de virker fint her.
>
> Er det stadig "Out of bounds 0" fejlen du får?
>
> Hvordan kalder du proceduren pSelectSame?
>
> Mvh
> HK
>
Tja - nu har jeg godt nok kun prøvet på listboxe med en tekst
Jeg mener den er lavet på MouseUp eventen, kan det være et problem ?
Ja det er stadig "Out of bounds 0" fejlen
Mvh
Ulrik
| |
David A. D. Konrad (19-08-2002)
| Kommentar Fra : David A. D. Konrad |
Dato : 19-08-02 14:32 |
|
"Ulrik Vadstrup" <vadstrup@post12.tele.dk> skrev i en meddelelse
news:3d60f014$0$27674
> Ja det er stadig "Out of bounds 0" fejlen
Den *kan* altså kun forekomme i din kode hvis
1) du tilgår en tom listbox.items
2) du tilgår en tom components
....Så det er et af de to steder, og så er det jo blot at steppe løkkerne
igennem indtil du finder fejlen. Hvis du er i tvivl om helt præcist hvilken
listbox/component det drejer sig om, så sørg for at have name-propertyen i
dine watches imens. Hvorfor looper du egentlig igennem din form med
components? Det kan da i visse tilfælde være et voldsomt overhead.
| |
Ulrik Vadstrup (19-08-2002)
| Kommentar Fra : Ulrik Vadstrup |
Dato : 19-08-02 18:46 |
|
"David A. D. Konrad" <david_konrad@hotmail.com> wrote in message
news:ajqrvr$ms$1@sunsite.dk...
> "Ulrik Vadstrup" <vadstrup@post12.tele.dk> skrev i en meddelelse
> news:3d60f014$0$27674
>
> > Ja det er stadig "Out of bounds 0" fejlen
>
> Den *kan* altså kun forekomme i din kode hvis
>
> 1) du tilgår en tom listbox.items
> 2) du tilgår en tom components
>
> ...Så det er et af de to steder, og så er det jo blot at steppe løkkerne
> igennem indtil du finder fejlen. Hvis du er i tvivl om helt præcist
hvilken
> listbox/component det drejer sig om, så sørg for at have name-propertyen i
> dine watches imens.
procedure TfrmMain.pSelectSame(const iCaller: TListBox);
var
i, j:Integer;
tstVar: String;
begin
For i := 0 to iCaller.Items.Count-1 do
if iCaller.Selected[i] Then
Begin
for j := 0 to frmMain.ComponentCount-1 do
If (frmMain.Components[j] is TListBox) AND (frmMain.Components[j] <>
iCaller) AND
(TListBox(frmMain.Components[j]).Items.count > 0) Then
Begin
frmMain.ActiveControl := TListBox(frmMain.Components[j]);
* tstVar := TListBox(frmMain.Components[j]).name;
TListBox(frmMain.Components[j]).Selected[i] := True;
end;
end;
end;
Breakpoint ved *
Ved debug vises følgende
Første LstBox hedder lstNames, og det er ikke denne der er klikket på...
(TListBox(frmMain.Components[j]).Items.count > 0)
Count retunerer 1
tstVar := TListBox(frmMain.Components[j]).name;
tstVar retunerer "lstNames"
j retuner 8 og i retunerer 0
Jeg kan sku ikke lure den...
Hvorfor looper du egentlig igennem din form med
> components? Det kan da i visse tilfælde være et voldsomt overhead.
>
Hvad kunne en alternertiv metode være ?
Mvh
Ulrik
| |
David A. D. Konrad (21-08-2002)
| Kommentar Fra : David A. D. Konrad |
Dato : 21-08-02 18:48 |
|
"Ulrik Vadstrup" <blackend@blackend.dk> skrev i en meddelelse
news:3d612f65$0$94734
> Første LstBox hedder lstNames, og det er ikke denne der er klikket på...
>
> (TListBox(frmMain.Components[j]).Items.count > 0)
>
> Count retunerer 1
>
> tstVar := TListBox(frmMain.Components[j]).name;
>
> tstVar retunerer "lstNames"
>
> j retuner 8 og i retunerer 0
>
> Jeg kan sku ikke lure den...
Det kan jeg heller ikke, men sender du mig dit projekt skal jeg gerne finde
fejlen for dig.
| |
|
|