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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 17:05   #1
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию Удаление списка из ComboBox

Есть ComboBox и его необходимо очистить.
Код:
ComboBox2.Items.Clear;
не подходит...
Посоветуйте чего нибудь)
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 26.05.2012, 17:22   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а чем не подходит то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.05.2012, 17:31   #3
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Очищать список ComboBox-а необходимо в процессе его же заполнения:
Код:
procedure TForm2.ComboBox2Change(Sender: TObject);
var
  z: Integer;
begin
  //ComboBox2.Items.Clear;

  MySQLResult:=MySQLClient.Query('SELECT Mesto FROM mop WHERE Mesto LIKE '''+
                                 ComboBox2.Text+'%'' AND Tip='''+
                                 ComboBox1.Text+''';', True, OK);
  if MySQLResult.RowsCount>0 then
  for z:=0 to MySQLResult.RowsCount-1 do
    begin
      ComboBox2.Items.Add(MySQLResult.FieldValueByName('Mesto'));
      MySQLResult.Next;
    end;
end;
ComboBox2.Items.Clear; мало того, что после ввода символа всегда возвращает каретку на начало, так еще и напрочь лишает возможности чего нить выбрать из списка...
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 26.05.2012, 18:23   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Очищать список ComboBox-а необходимо в процессе его же заполнения
Это как-то по китайски, но если очень хочется, то можно так
Код:
procedure TForm2.ComboBox2Change(Sender: TObject);
var
  z: Integer;
begin
  ComboBox2.OnChange:=nil;
  ComboBox2.Items.Clear;
//здесь ваш код нового заполнения
  ...
  ComboBox2.OnChange:=ComboBox2Change;
end;
Для позиции курсора повоюйте с SelStart
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.05.2012, 18:33   #5
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это как-то по китайски...
Мне не критично "Как?"! Лишь бы работало!
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 26.05.2012, 18:45   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Например так:
Код:
 Form1.pFIBQuery1.Close;
 Form1.pFIBQuery1.SQL.Clear;
 Form1.pFIBQuery1.SQL.Text:='select * from Table_Name';
 Form1.pFIBQuery1.ExecQuery;
 Form1.ComboBox1.Items.Clear; 
 while not Form1.pFIBQuery1.Eof do
 begin
  Form1.ComboBox1.Items.Add(Form1.pFIBQuery1.FieldByName('Pole').AsString;
  Form1.pFIBQuery1.Next;
 end;
идея понятна? переделай под свой запрос
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.05.2012, 18:51   #7
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

artemavd У меня проблема в том, что очищать список КомбоБокса надо в процессе его заполнения!
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 26.05.2012, 18:56   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Так ты внимательно посмотри на мой код. Объясняю последовательность действий сего кода (помести его туда, где тебе надо заполнить ComboBox1):
1. Сначала выполняется какой-то запрос
2. Потом очищается нужный ComboBox
3. Потом, все выбранные записи в запросе, заносятся в нужный ComboBox
Если это не то, что тебе нужно - значит ты сам не знаешь, что тебе нужно сделать, ибо то, что я написал как раз и очищает в процессе заполнения и сразу заполняет нужный ComboBox
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.05.2012, 19:39   #9
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Не работает у меня...
Уже крыша едет...
Код:
procedure TForm2.ComboBox2Change(Sender: TObject);
var
  z: Integer;
begin
  // 1 - Сохраняем текст ComboBox-а
  s:=ComboBox2.Text;
  
  // 2 - Выполняем запрос
  MySQLResult:=MySQLClient.Query('SELECT Mesto FROM mop WHERE Mesto LIKE '''+
                                 ComboBox2.Text+'%'' AND Tip='''+
                                 ComboBox1.Text+''';', True, OK);

  // 3 - Если найдены записи 
  if MySQLResult.RowsCount>0 then
  begin
  // 4 - Очищаем ComboBox
  ComboBox2.Items.Clear;
  // 5 - Заполняем ComboBox
  for z:=0 to MySQLResult.RowsCount-1 do
    begin
      ComboBox2.Items.Add(MySQLResult.FieldValueByName('Mesto'));
      MySQLResult.Next;
    end;
  // 6 - Возвращаем начальный текст в ComboBox
    ComboBox2.Text:=s;
  end;
end;
И не работает...
1. Каретка всегда смещается в начало строки;
2. Сколько не выбирай из списка - ComboBox пустой.
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 26.05.2012, 19:56   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

1. Странно ты сохраняешь текст. Совет: перегони содержимое ComboBox2.Items в переменную типа TStringList, так надежнее.
Вот эта билеберда мне вообще не понятна с точки зрения логики:
Код:
// 3 - Если найдены записи 
  if MySQLResult.RowsCount>0 then
  begin
  // 4 - Очищаем ComboBox
  ComboBox2.Items.Clear;
  // 5 - Заполняем ComboBox
  for z:=0 to MySQLResult.RowsCount-1 do
    begin
      ComboBox2.Items.Add(MySQLResult.FieldValueByName('Mesto'));
      MySQLResult.Next;
    end;
  // 6 - Возвращаем начальный текст в ComboBox
    ComboBox2.Text:=s;
Зачем проверяет что количество записей больше 0? Пусть запрос вытаскивает все записи, а ты проверяй количество записей не в запросе, а уже после выполнения запроса сам ComboBox2 на количество записей, т.е. условие
Код:
  if MySQLResult.RowsCount>0 then
  begin
   ...
  end;
- абсолютно лишнее. ИМНО.
Далее.
2. Не пихай в событие OnChange, код в котором выполняется при любой попытке ввести с клавиатуры что-то в ComboBox2. Выполняй этот код в другом месте, либо попробуй поместить его в OnEnter, но лучше заполнять список в другом месте.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать элемент с списка listViewа в combobox ? pro100saniok Помощь студентам 1 17.06.2011 15:30
Запись в MySQL таблицу, выбранную из списка combobox AkiTe Помощь студентам 1 08.06.2011 08:26
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
В combobox выбирать данные из списка таблицы (Access) Inbox БД в Delphi 1 15.06.2007 10:45