Форум: "Начинающим";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
Внизисключить дублирование в ComboBox ах Найти похожие ветки
← →
Handler (2013-01-05 11:40) [0]Помогите с алгоритмов, что-то не пойму как сделать.
Есть 3 ComboBox"а
ComboBox1:
не выбрано
1
2
3
ComboBox2:
не выбрано
1
2
3
ComboBox3:
не выбрано
1
2
3
Нужно сделать, чтобы, например, при выборе в ComboBox2 значения 3 это значение должно пропасть из ComboBox1 и ComboBox3 (т.е. нужно сделать так, чтобы значения в ComboBox"ах не дублировались, если в одном из ComboBox"ов выбрано какое-то значение, то его нельзя было бы выбрать в других ComboBox"ах).
← →
Dimka Maslov © (2013-01-05 11:57) [1]В событии OnChange проверять состояние остальных комбобоксов и удалять ставший ненужным элемент их из списков.
← →
KilkennyCat © (2013-01-05 11:58) [2]один список на всех.
в начале комбобоксам присваивается этот список
один обработчик селекта на всех.
в обработчике присваивается заново общий список, за исключением тех, которые выделены, включая выделенный того, кто вызвал обработчик.
список в обработчике обрабатывать с 1 (исключить "не выбрано")
← →
Dmitry1987 (2013-01-05 14:26) [3]Сделал, вроде работает. Гляньте, может что не предусмотрел или что-то можно оптимизировать
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,
Contnrs;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ComboBoxesChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FAvailableValues: TStringList;
FComboBoxes: TObjectList;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
FAvailableValues := TStringList.Create;
FAvailableValues.Add("-");
FAvailableValues.Add("1");
FAvailableValues.Add("2");
FAvailableValues.Add("3");
FComboBoxes := TObjectList.Create;
FComboBoxes.Add(ComboBox1); // Tag = 0
FComboBoxes.Add(ComboBox2); // Tag = 1
FComboBoxes.Add(ComboBox3); // Tag = 2
for I := 0 to FComboBoxes.Count - 1 do
begin
TComboBox(FComboBoxes[I]).Items.AddStrings(FAvailableValues);
TComboBox(FComboBoxes[I]).ItemIndex := 0;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FAvailableValues.Free;
FComboBoxes.Free;
end;
procedure TForm1.ComboBoxesChange(Sender: TObject);
var
FilteredValues: TStringList;
I, J: Integer;
SelectedValue: string;
begin
FilteredValues := TStringList.Create;
try
for I := 0 to FComboBoxes.Count - 1 do
begin
with TComboBox(FComboBoxes[I]) do
// Сохраняем значение ComboBox"а
SelectedValue := Items[ItemIndex];
// Создаем список значений ComboBox"а исключая значения
// выбранные в других ComboBox"ах
FilteredValues.AddStrings(FAvailableValues);
for J := 0 to FComboBoxes.Count - 1 do
begin
if J = I then
Continue;
with TComboBox(FComboBoxes[J]) do
if (Items[ItemIndex] <> "-") then
FilteredValues.Delete(FilteredValues.IndexOf(Items[ItemIndex]));
end;
with TComboBox(FComboBoxes[I]) do
begin
Items.Clear;
Items.AddStrings(FilteredValues);
ItemIndex := Items.IndexOf(SelectedValue);
end;
FilteredValues.Clear;
end;
finally
FilteredValues.Free;
end;
end;
end.
← →
Dmitry1987 (2013-01-05 14:27) [4]Dmitry1987 = Handler
← →
sniknik © (2013-01-06 01:52) [5]третий комбобокс лишний, раз значение там высчитывается на основании первых двух... не стоит усложнять юзеру жизнь лишней "непоняткой"/действием.
← →
Smile (2013-01-06 11:21) [6]А если выбраны 3 (по sniknik © (06.01.13 01:52) [5] достаточно 2-х), то в программе наступает полный ступор?
Ни одного значения, ни в одном из в комбобоксов изменить невозможно, разве только перезапустив эту гениальную программу.
:)
← →
sniknik © (2013-01-06 16:23) [7]> изменить невозможно
у него предусмотрено поле "не выбрано" -
> FAvailableValues.Add("-");
типа снимаешь выбор, и выбираешь бывшее тут значение в другом. ... что тоже, ИМХО, кажется усложнением... но придумать лучшего без знания контекста не могу. хотя, так как есть, рабочее.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c