Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > обновление combobox после редактирования


Автор: Avada 24.11.2010, 00:43
Привет всем. Моя проблема заключается в следующем:
есть хмл-файл, в который я заношу некоторые данные и
затем часть этих данных заносится в combobox.

Если закрыть программу, а затем запустить по новой, 
результат будет налицо - в выпадающем списке добавился
новый(е) элемент(ы).

Подскажите, как сделать обновление комбо непосредственно
после редактирования?

Refresh не помогает

Спасибо заранее

Автор: ~FoX~ 24.11.2010, 01:23
Вызови процедуру загрузки итемов комбобокса непосредственно после редактирования...

Автор: Avada 24.11.2010, 01:31
а что за процедура?

Автор: ~FoX~ 24.11.2010, 02:02
Avada, О как.... ну это там где должно быть что нить вроде ComboBox1.Items.Add('бда-бла-бла').... 
Код покажи...

Автор: Avada 24.11.2010, 02:02
вот форм криэйт

procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
i, j: integer;
begin
// добавить в выпадающий список пункт"блабла"
// теперь открываем хмл документ
XMLDocument1.LoadFromFile('index.xml');
// и заносим в список названия блабла
XMLDocument1.Active := true;
j := XMLDocument1.DocumentElement.ChildNodes.Count;
i := 0;
while i <> j do
begin
s := VarToStr(XMLDocument1.DocumentElement.ChildNodes[i].Attributes['name']);
ComboBox1.Items.Add(s);
inc(i);
end;

вот само редактирование, клик

procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
s: string;
begin
  if ComboBox1.Text = 'Создать ' then
  begin
  XMLDocument1.LoadFromFile('index.xml');
  XMLDocument1.Active := true;
  XMLDocument1.DocumentElement.AddChild('group');
  stringgrid1.Enabled := true;
  i := XMLDocument1.DocumentElement.ChildNodes.Count;
  XMLDocument1.DocumentElement.ChildNodes[i-1].Attributes['name'] := edit1.text;
  XMLDocument1.DocumentElement.ChildNodes[i-1].Attributes['form-master'] := edit2.Text;
  XMLDocument1.DocumentElement.ChildNodes[i-1].Text := #13;
  XMLDocument1.SaveToFile('index.xml');
  XMLDocument1.Active := false;
  end

Автор: ~FoX~ 24.11.2010, 02:03
Avada, ну так и вызови свои Add еще раз...

Автор: Avada 24.11.2010, 02:07
Торможу, сказывается недосыпание)
исправил предыдущее сообщение

Автор: ~FoX~ 24.11.2010, 11:42
Используйте теги кода. В конце выполнения клика добавь вызов FormCreate
Код

procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
s: string;
begin
  if ComboBox1.Text = 'Создать ' then  begin
    XMLDocument1.LoadFromFile('index.xml');
    XMLDocument1.Active := true;
    XMLDocument1.DocumentElement.AddChild('group');
    stringgrid1.Enabled := true;
    i := XMLDocument1.DocumentElement.ChildNodes.Count;
    XMLDocument1.DocumentElement.ChildNodes[i-1].Attributes['name'] := edit1.text;
    XMLDocument1.DocumentElement.ChildNodes[i-1].Attributes['form-master'] := edit2.Text;
    XMLDocument1.DocumentElement.ChildNodes[i-1].Text := #13;
    XMLDocument1.SaveToFile('index.xml');
    XMLDocument1.Active := false;
  end;
  FormCreate(Sender);
end;

Автор: Avada 24.11.2010, 13:22
спасибо вам большое!

была еще проблема с дублированием элементов списка,
т.е. к текущим добавлялись ниже их копии + свежедобавленное.
поставил проверку чтобы если есть такой элемент, его не ставить,
а сначала в тупик поставило.

Задача решена!

Автор: ~FoX~ 24.11.2010, 14:18
Цитата(Avada @  24.11.2010,  14:22 Найти цитируемый пост)
поставил проверку чтобы если есть такой элемент, его не ставить,

А не проще ComboBox1.Items.Clear сделать и не морочиться с проверками? 

Код

procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
i, j: integer;
begin
  // добавить в выпадающий список пункт"блабла"
  // теперь открываем хмл документ
  XMLDocument1.LoadFromFile('index.xml');
  // и заносим в список названия блабла
  XMLDocument1.Active := true;
  j := XMLDocument1.DocumentElement.ChildNodes.Count;
  i := 0;
  ComboBox1.Items.Clear; //<-----
  while i <> j do begin
     s := VarToStr(XMLDocument1.DocumentElement.ChildNodes[i].Attributes['name']);
     ComboBox1.Items.Add(s);
     inc(i);
  end;
end;

Автор: Avada 24.11.2010, 15:01
в моем случае нет, т.к. значения фиксированные, стандартные пункты "создать" и "удалить"
это после них уже все вводится

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)