Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 03:36   #1
midis
 
Регистрация: 18.09.2010
Сообщений: 9
По умолчанию ComboBox в Delphi

Ребят нужна помощь. Помогите решить задачу в Delphi с ComboBox плиз. Условие такое: Есть четыре компонента ComboBox по четыре строки в каждом.
Как сделать так чтобы при выборе допустим в ComboBox1 второй строки в остальных СomboBox вторую строку выбрать было нельзя, и в тоже время при выборе скажем в ComboBox3 четвертой строки она была бы недоступна в других ComboBox ? Заранее СПС за внимание.
midis вне форума Ответить с цитированием
Старый 18.09.2010, 06:59   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Надо выяснить что подразумевается под "недоступностью строки".
Комбобокс примитивный компонент и в нем нет события которое наступает ПЕРЕД изменением значения (строки), а, следовательно, невозможно проверить какая строка выбирается, чтобы запретить ее выбор.
Есть событие, которое наступает ПОСЛЕ выбора строки. Эти обстоятельства требуют уже более сложной реализации взаимодействия комбобоксов.
А конкретная реализация зависит от того, в каком виде требуется "недоступность".
Есть пара вариантов этой "недоступности".
- выбрали недоступную строку, но ее меняем на ту, которая была прежде или, если в комбобоксе уже показывается недоступная, то меняем на предыдущую из списка или очищается едит комбобокса;
- удалять строку из списка комбобокса, которую нельзя выбирать (после необходимо ее восстановить в списке, если выбирать уже можно).
Скандербег вне форума Ответить с цитированием
Старый 21.09.2010, 00:27   #3
midis
 
Регистрация: 18.09.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Надо выяснить что подразумевается под "недоступностью строки".
Комбобокс примитивный компонент и в нем нет события которое наступает ПЕРЕД изменением значения (строки), а, следовательно, невозможно проверить какая строка выбирается, чтобы запретить ее выбор.
Есть событие, которое наступает ПОСЛЕ выбора строки. Эти обстоятельства требуют уже более сложной реализации взаимодействия комбобоксов.
А конкретная реализация зависит от того, в каком виде требуется "недоступность".
Есть пара вариантов этой "недоступности".
- выбрали недоступную строку, но ее меняем на ту, которая была прежде или, если в комбобоксе уже показывается недоступная, то меняем на предыдущую из списка или очищается едит комбобокса;
- удалять строку из списка комбобокса, которую нельзя выбирать (после необходимо ее восстановить в списке, если выбирать уже можно).
Спс за ответ ну я просто не очень опытный програмер ) Но так и сделал "после выбора строки" переход на индекс 0. Вот что приблизительно вышло:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);
var
a, b, c, d:string;
begin
a:= ComboBox1.Items[ComboBox1.ItemIndex];
b:= ComboBox2.Items[ComboBox2.ItemIndex];
c:= ComboBox3.Items[ComboBox3.ItemIndex];
d:= ComboBox4.Items[ComboBox4.ItemIndex];
if (a=b) then
Combobox1.ItemIndex:=0;
if (a=c) then
Combobox1.ItemIndex:=0;
if (a=d) then
Combobox3.ItemIndex:=0;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
var
a, b, c, d:string;
begin
b:= ComboBox2.Items[ComboBox2.ItemIndex];
a:= ComboBox1.Items[ComboBox1.ItemIndex];
c:= ComboBox3.Items[ComboBox3.ItemIndex];
d:= ComboBox4.Items[ComboBox4.ItemIndex];
if (b=a) then
Combobox2.ItemIndex:=0;
if (b=c) then
Combobox2.ItemIndex:=0;
if (b=d) then
Combobox2.ItemIndex:=0;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
var
a, b, c, d:string;
begin
c:= ComboBox3.Items[ComboBox3.ItemIndex];
a:= ComboBox1.Items[ComboBox1.ItemIndex];
b:= ComboBox2.Items[ComboBox2.ItemIndex];
d:= ComboBox4.Items[ComboBox4.ItemIndex];
if (c=a) then
Combobox3.ItemIndex:=0;
if (c=b) then
Combobox3.ItemIndex:=0;
if (c=d) then
Combobox3.ItemIndex:=0;
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
var
a, b, c, d:string;
begin
d:= ComboBox4.Items[ComboBox4.ItemIndex];
a:= ComboBox1.Items[ComboBox1.ItemIndex];
b:= ComboBox2.Items[ComboBox2.ItemIndex];
c:= ComboBox3.Items[ComboBox3.ItemIndex];
if (d=a) then
Combobox4.ItemIndex:=0;
if (d=b) then
Combobox4.ItemIndex:=0;
if (d=c) then
Combobox4.ItemIndex:=0;
end;

end.

Можно было конечно переменные не объявлять но мне так понятней. В каждом из ComboBox-ов в properties ItemIndex указал начало 0. В каждом ComboBox-е одинаковые строки.
Ну как я уже говорил програмер с меня зеленый и мне уж лучше ответ в коде но всеравно спс ) А вообще правильно сказал что я програмер, а не кодер, а эт разные вещи ))
Ну может есть и другой способ как это реализовать ? У меня вышло только так (

Последний раз редактировалось midis; 21.09.2010 в 00:31.
midis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ComboBox (Delphi) VadEr Помощь студентам 8 25.04.2015 22:28
Работа с combobox (delphi) JNLYSk Помощь студентам 15 26.06.2012 20:21
Delphi компонент ComboBox severin Общие вопросы Delphi 12 08.10.2010 20:19
Delphi ComboBox tag Помощь студентам 12 11.08.2010 19:21
Фильтрация в Delphi с помощью Combobox Веснушка_ната Помощь студентам 4 07.04.2009 02:36