Страницы: 1 2 вся ветка
Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Вниз

ListBox-ы и Edit-ы 


Ольга   (2002-01-18 12:39) [0]

У меня есть 3 листбокса и 3 едита, мне нужно, чтобы при клике на строке одного из листбоксов, выделялись строки с тем же номером в остальных листбоксах и значения этих строк копировались в едиты, я написала, но что-то глючит, помогите пожалуйста...

ListBox2.ItemIndex:=ListBox1.ItemIndex;
ListBox3.ItemIndex:=ListBox1.ItemIndex;

if ListBox3.ItemIndex < 0 then edit1.text := ""
else edit1.text := ListBox3.Items[ListBox3.ItemIndex];
if ListBox1.ItemIndex < 0 then edit2.text := ""
else edit2.text := ListBox1.Items[ListBox1.ItemIndex];
if ListBox2.ItemIndex < 0 then edit3.text := ""
else edit3.text := ListBox2.Items[ListBox2.ItemIndex];



Serghei   (2002-01-18 13:01) [1]

Да нет не глючит - только что попробовал - все нормально!
По мне разве что порядок присваивания запутан
LB3->Ed1
LB1->Ed2
LB2->Ed3



yaJohn   (2002-01-18 13:05) [2]

1. Gde stoit etot kod? V obrabotke kakogo sobitia?
2. Esli ListBox1.ItemIndex==ListBox2.ItemIndex==ListBox3.ItemIndex, to zachem tri proverki?
3. Chto gluchit? Kak gluchit?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
ListBox3: TListBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
procedure SetItemIndex(Sender,ListBox:TListBox);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Tag:=integer(Edit1);
ListBox2.Tag:=integer(Edit2);
ListBox3.Tag:=integer(Edit3);
end;

procedure TForm1.SetItemIndex(Sender,ListBox:TListBox);
begin

if (Sender<>ListBox)and
(ListBox.Items.Count>Sender.ItemIndex)
then ListBox.ItemIndex:=Sender.ItemIndex;
TEdit(ListBox.Tag).Text:=
ListBox.Items[ListBox.ItemIndex];
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
if TListBox(Sender).ItemIndex<0 then exit;
SetItemIndex(@Sender,ListBox1);
SetItemIndex(@Sender,ListBox2);
SetItemIndex(@Sender,ListBox3);
end;

end.

Dlia vseh ListBox - OnClick=ListBox1Click



yaJohn   (2002-01-18 13:08) [3]

Mn...
A zachem hash?
Ne proshe li prosto ID iz globalnoy sohroniaemoy peremennoy s avtoinkrementom?
Krome togo vozmojen sluchay, kogda dannie v raznih uzlah dereva sovpadaut. Hash vernet ravnie ID...



Ольга   (2002-01-18 13:10) [4]

В нумерации ничего не напутано - все правильно.
Просто у меня при клике на 1 лист - данные копируются только во 2 и 3 едиты, при клике на 2 лист, данные копируются в 1 и 3 едиты и в 3 листбоксе такая же фигня. Я ничего не понимаю - два дня уже сижу... Помогите...



yaJohn   (2002-01-18 13:12) [5]

Opppssss.... MODERATOR, udalite plizs predidushee soobshenie, na chet HASH, eto iz drugOY vetki :(((((



Andrey   (2002-01-18 13:13) [6]

> Ольга
Мыло посмотри.



Serghei   (2002-01-18 13:16) [7]

Не знаю!
У меня получается так:

LB1 LB2 LB3
1 as q
<2> <zx> <w>
3 cv e
4 fg r
5 hj t

Ed1 Ed2 Ed2
w 2 zx
то есть;
LB3->Ed1
LB1->Ed2
LB2->Ed3



Ольга   (2002-01-18 13:24) [8]

> Andrey
Спасибо
А в каком Delphi он у тебя написан, а то он мне ошибку выдает:
Invalid Stream Format



Ольга   (2002-01-18 13:27) [9]

> Serghei
У меня они вот как распологаются

Edit2 Edit3 Edit1

LB1 LB2 LB3

LB3->Ed1
LB1->Ed2
LB2->Ed3, все правильно, и в проге все передается правильно, но вот такой глюк...



Andrey   (2002-01-18 13:31) [10]

> Ольга
D5

Опять мыло посмотри.



Ольга   (2002-01-18 13:38) [11]

>Andrey

Он мне вот что пишет:
Error reading Form1.OldCreateOrder^ Property does not exist/ Ignore the error and continue? и так далее



Ольга   (2002-01-18 13:40) [12]

>Andrey

В принципе работает, но у меня все так же, просто 3 едита и тот по которому кликать - не передает значение, а если еще раз кликнуть то передает со второго раза



Andrey   (2002-01-18 13:45) [13]

> Ольга
Чтоб с первого раза есть событие OnClick
Чтоб со второго OnDblClick



Ольга   (2002-01-18 13:50) [14]

>Andrey

У меня с OnClick - строка выделяется
а с OnDBClick - данные переносятся

и переносятся во все едиты после двойного DBClick



Ольга   (2002-01-18 13:54) [15]


edit1.text := ListBox3.Items[Listbox1.ItemIndex];
edit2.text := ListBox1.Items[Listbox1.ItemIndex];
{edit3.text := ListBox2.Items[Listbox1.ItemIndex];}

ListBox2.ItemIndex:=ListBox1.ItemIndex;
ListBox3.ItemIndex:=ListBox1.ItemIndex;


Вот так работает, а вот так не работает и пишет ошибку listbox out of bounds


edit1.text := ListBox3.Items[Listbox1.ItemIndex];
edit2.text := ListBox1.Items[Listbox1.ItemIndex];
edit3.text := ListBox2.Items[Listbox1.ItemIndex];

ListBox2.ItemIndex:=ListBox1.ItemIndex;
ListBox3.ItemIndex:=ListBox1.ItemIndex;



Serghei   (2002-01-18 14:19) [16]

2 Ольга
А ты попробуй сделать проверку на совпадение количества строк в листбоксахб если они разные.



Serghei   (2002-01-18 14:22) [17]

2 Ольга
У себя заметил недоработку - может мается и у тебя - когда первый раз кликаю по ЛистБокс1 на первую строку, в едитах появляются нужные значения а вот остальные ЛистБоксы не селектятся! Если начинаю со 2, 3 ... строки усе в порядке!



yaJohn   (2002-01-18 14:26) [18]

Poprobuyte moy kod, rabotaet use, proverenno.... Sm vishe.



Serghei   (2002-01-18 14:28) [19]

2 Ольга
Посмотри на мыло - послал свой проект (сделан в Д4)



Serghei   (2002-01-18 14:33) [20]

2 yaJohn
I u menia rabotaiet normalino - ne znaiu pocemu takie trabli!



Ольга   (2002-01-21 12:26) [21]

> yaJohn
Попробовала, как ты написал, все время ставит на первую запись



yaJohn   (2002-01-21 13:22) [22]

>Попробовала, как ты написал, все время ставит на первую запись
U vseh ListBox OnClick=ListBox1Click???



Ольга   (2002-01-21 13:33) [23]

> yaJohn
Да на всех...



yaJohn   (2002-01-21 13:46) [24]

U menia rabotaet 8(
OnCreate otrabativaet???
Poprobuy v novom proekte.



MBo   (2002-01-21 13:54) [25]

при условии, что уоличество строк одинаково, и onclick у всех один

procedure TForm1.ListBox1Click(Sender: TObject);
var n:integer;
begin
n:=tlistbox(sender).itemindex;
if n>=0 then begin
if sender=listbox1 then begin
listbox2.itemindex:=n;
listbox3.itemindex:=n;
end;
if sender=listbox2 then begin
listbox1.itemindex:=n;
listbox3.itemindex:=n;
end;
if sender=listbox3 then begin
listbox1.itemindex:=n;
listbox2.itemindex:=n;
end;
edit1.text:=listbox1.items[n];
edit2.text:=listbox2.items[n];
edit3.text:=listbox3.items[n];
end;
end;



Ольга   (2002-01-21 14:17) [26]

Блин!
Сделала как MBo сказал, в конце 2 едита работают, а третий глючит



yaJohn   (2002-01-21 14:22) [27]

Upakuy tvoy proekt v zip (rar,arj) i vishli na milo.



MBo   (2002-01-21 14:26) [28]

каким образом глючит?
попробуй сделать с нуля, 3 чистых бокса, 3 Edit

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to 9 do begin
listbox1.items.add("a"+inttostr(i));
listbox2.items.add("b"+inttostr(i));
listbox3.items.add("c"+inttostr(i));
end;
end;



Ольга   (2002-01-21 14:45) [29]

У меня данные берутся из таблицы, при загрузке проги



yaJohn   (2002-01-21 15:03) [30]

Tak.
Po OnClick vse rabotaet. ListBox_bI perekluchautsia sinhronno.
Po DblClick dannie iz ListBox_ov idut v Edit_bI. I vot tut...
procedure TForm1.ListBox1DblClick(Sender: TObject);
var n:integer;
begin
n:=tlistbox(sender).itemindex;
if n>=0 then begin
if sender=listbox1 then begin
listbox2.itemindex:=n;
listbox3.itemindex:=n;
end;
if sender=listbox2 then begin
listbox1.itemindex:=n;
listbox3.itemindex:=n;
end;
if sender=listbox3 then begin
listbox1.itemindex:=n;
listbox2.itemindex:=n;
end;
// Do etogo mesta mojno vse vikinut", poskolku sinhronnoe perekluchenie ListBox_ov uje otrabotano v OnClick
edit1.text:=listbox1.items[n];
// A vot tut avtomaticheski vizivaetsia Edit1.OnCange!!! A v nem u tebia peregrujaetsia ListBox. Pri etom ListBox.Items.Count mojet okazatsia menshe chem [n]....
edit2.text:=listbox2.items[n];
edit3.text:=listbox3.items[n];
end;

Sformuliruy polnost"u i tochno, kogda znachenia iz ListBox_ov doljni popadat v edit_bI, kogda doljna srabativat filtracia po znacheniu Edit_ov.



Ольга   (2002-01-21 15:08) [31]

Сначала должны данные передаться в Edit -ы, а потом происходить фильтрация...



yaJohn   (2002-01-21 15:16) [32]

>Сначала должны данные передаться в Edit -ы, а потом происходить фильтрация...
Eto poniatno. Sobstvenno tak i poluchaetsia. No потом , eto kogda??? Neposredstvenno posle izmenenia Edit_a?
T.e. kogda user delaet DblClick po itemu v ListBox proishodit avtomaticheskaya filtracia soderjimogo ListBox_ov no dlia kajdogo ListBox_a filtracia idet po sobstvennomu polu tablici. Analogichno pri nabore v Edit_e "ruchkami".
Ya pravilno ponial?



Ольга   (2002-01-21 15:19) [33]

Ну да, после изменения Edit -а, ланные подстанавливаются в Edit-ы, их значение меняется, и происходит событие EditOnChange



Ольга   (2002-01-21 15:27) [34]

Вообщем, мне надо сначала как-то отключить OnChange, а потом включить, только как?



Alx2   (2002-01-21 15:30) [35]

OnChange := Nil ?



yaJohn   (2002-01-21 15:31) [36]

>Ну да, после изменения Edit -а, ланные подстанавливаются в Edit-ы, их значение меняется,
Etogo ya ne ponial...
U menia poluchilos tak:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
ListBox1.ItemIndex:=TListBox(Sender).ItemIndex;
ListBox2.ItemIndex:=TListBox(Sender).ItemIndex;
ListBox3.ItemIndex:=TListBox(Sender).ItemIndex;
end;

ListBox1Click stoit OnClic u vseh ListBox_ov. Eto sinhronizacia.
DblClick u kajdogo LisBox_a svoy:
procedure TForm1.ListBox1DblClick(Sender: TObject);
var n:integer;
begin
edit2.text:=listbox1.items[listbox1.ItemIndex];
end;

procedure TForm1.ListBox2DblClick(Sender: TObject);
begin
edit3.text:=listbox2.items[listbox2.ItemIndex];
end;

procedure TForm1.ListBox3DblClick(Sender: TObject);
begin
edit1.text:=listbox3.items[listbox3.ItemIndex];
end;

Eto zapolnenie Edit_ov. Pri etom vajno, chto kajdiy ListBox meniaet tolko svoy Edit.

OnCange vseh Edit_ov sleduet, vidimo, dobavit" v konce:
listBox1.ItemIndex:=-1;
listBox2.ItemIndex:=-1;
listBox3.ItemIndex:=-1;


U Edit1 ya ne obnarujil OnChange. Tak nado?



Ольга   (2002-01-21 15:34) [37]

Ребята!!!!
Круто!!!
Все получилось!!!!
ОГРОМНОЕ СПАСИБО!!!



yaJohn   (2002-01-21 15:37) [38]

>Вообщем, мне надо сначала как-то отключить OnChange, а потом включить, только как?
Net-net, ne nado.
Voobsheto (bez obid) sleduet narisovat na liste bumagi vsu posledovatelnost proishodiashih sobitiy i horosho predstavit" sebe, chto vsled za chem doljno proishodit".



Ольга   (2002-01-21 15:48) [39]

А как мне обратно ONChange подключить или его заново надо писать?

>yaJohn
У меня база данных паролей организации (ну так еще все в разработках), 1 ЛистБокс - отдел, 2 Листбокс - сотрудник, 3 ЛистБокс - пароль, который генерируется и сохраняется, для быстрого поиска на Едитах происходит фильтрация, она осуществляется при изменении Значения Едита, но если мне надо выбрать строку для удаления (для помещения ее в Едиты) происходит преждевременная фильтрация, я ее сделала в nil и она больше не работает, надо заново прописывать?



Ольга   (2002-01-21 16:00) [40]

В принципе, подставила Edit2Change - заработало...




Страницы: 1 2 вся ветка
Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.79 MB
Время: 0.037 c
3-8751            Olfi                  2002-01-03 15:29  2002.02.04  
Вопрос по TQuery...


1-8871            Stror                 2002-01-13 12:16  2002.02.04  
WebBrowser


1-8810            Анатолий              2002-01-18 03:49  2002.02.04  
SaveDialog


7-9009            Predator              2001-10-28 00:16  2002.02.04  
ОС


7-9011            stalker17             2001-10-20 16:00  2002.02.04  
COM порт