2015-09-27 2 views
1

Можно ли сохранить новый элемент в поле со списком? (Delphi)Можете ли вы добавить элемент Delphi combobox динамически постоянно?

Если вы скажете, например. Combobox1.Items.Add('Item');, тогда этот элемент появится в выпадающем списке в течение всего прогона программы, однако если вы закроете и снова откроете программу, тогда этот элемент исчезнет.

Возможно ли каким-либо образом добавить этот элемент навсегда через код во время выполнения?

Заранее спасибо

+1

Необходимо где-то сохранить значение. В файл или в реестр. Возможно, под профилем пользователя. –

+1

Вы можете создать «историю» комбинированного окна. Я думаю, что это идея Дэвида. См. Этот ответ: http://stackoverflow.com/questions/5465590/auto-append-complete-from-text-file-to-an-edit-box-delphi –

ответ

3

Самый простой способ Propably:

ComboBox1.Items.SaveToFile («Somefile.txt»);

И потом:

ComboBox1.Items.LoadFromFile ('Somefile.txt');

Лично я просто использую любую базу данных файлов, такую ​​как mysqlite для хранения параметров программы, comboboxes и т. Д. Сначала это может показаться немного выше, но очень часто эта «крошечная часть программного обеспечения» растет, и гораздо удобнее хранить материал в базе данных, где вы могли бы, например, упорядочивать элементы со списком, назначать им дополнительные значения и так далее.

С наилучшими пожеланиями

+0

Да, это кажется намного проще, спасибо большое – RaymondSWalters

0

Вы можете загрузить свои элементы из текстового файла, который вы прочитали при инициализации программы

+0

Я боялся, что вы скажете, что ... I просто надеялся, что есть более простой способ сделать это ... Нет ли другого пути? – RaymondSWalters

+2

Вы надеетесь на магию. Вы хотите, чтобы компьютер читал ваши мысли. Этого не происходит. Отсюда и потребность в программистах. –

+0

ОК спасибо в любом случае – RaymondSWalters

3

Выпадающими, когда первым создал, всегда пустой. То есть, конструктор TComboBox.Create не помещает ничего в список. Однако вы, вероятно, никогда не вызывали этот конструктор напрямую. Вместо этого вы используете среду IDE для размещения элементов управления в формах, а затем эти элементы управления отображаются в ваших формах во время выполнения. Форма добавляет элементы в поле со списком при загрузке описания формы из данных DFM формы.

Возможно, вы заметили файлы DFM в каталоге проектов. IDE создает их при создании формы с помощью Form Designer. Когда вы скомпилируете свою программу, эти файлы связаны с вами EXE как ресурсов.

Если вы хотите изменить что-либо о том, как выглядит ваша форма или какие данные она содержит при первой загрузке, вам необходимо изменить этот ресурс. Windows provides ways of modifying resources, и Delphi provides ways of converting DFM data into and out of the binary format used in resources. Загрузите данные ресурсов, преобразуйте их в текст, внесите изменения, преобразуйте их обратно в двоичные и замените старый ресурс на новый.

Небольшая проблема заключается в том, что ОС не позволит изменять программу, которая все еще работает, даже если изменения инициируются самой программой. That can be worked around, though.

Таким образом, хотя ответ на вопрос, который Вы задали в да, в конце концов, вы собираетесь найти его гораздо проще просто хранить элементы комбо-бокс просто о где-нибудь еще (например, , внешний файл, реестр, базу данных и даже облако), а затем загружать и добавлять их самостоятельно после создания формы, но перед ее отображением пользователю. Пользователь никогда не узнает разницу.

Чтобы запустить код после загрузки формы, но перед его отображением переопределить метод формы Loaded.

+0

Я так вижу. Я все еще в старшей школе, и я не так разбираюсь в программировании, поэтому мне просто интересно, есть ли способ, но теперь я вижу, что единственный способ - сохранить элементы в другом месте и добавить их снова в начале программы – RaymondSWalters

Смежные вопросы