Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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 вся ветка

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

Наверх




Память: 0.53 MB
Время: 0.005 c
1-8939
Socol
2002-01-18 07:14
2002.02.04
Поиск файла


1-8929
Vacheslav
2002-01-17 11:48
2002.02.04
Как запоминать настройки и полученные значения после закрытия программы


1-8945
kserg@ukr.net
2002-01-18 13:12
2002.02.04
Как программно перевести фокус в ячейку StringGrid.Cells


14-9000
Вадим
2001-12-12 18:21
2002.02.04
Не хорошо... :((


1-8899
Velocity
2002-01-15 12:28
2002.02.04
Потоки и динамическое выделение памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский