Как получить пользовательский ввод из фрейма и сохранить в текстовый файл? - PullRequest
0 голосов
/ 03 августа 2020

Мои программы работают следующим образом:

  • У меня есть форма с кнопкой добавления, кнопкой сохранения и элементом управления табуляцией.
  • Когда нажимается кнопка добавления в форме, tabcontrol добавит больше tabitem. И tabitem в основном добавляется из myframe, который включает в себя значение ввода пользователя в TEdit.

Я хочу, чтобы при нажатии на сохранении button(tick) в форме. Это мой код по форме. Кто-нибудь может дать мне подсказку?

Моя рамка Изображение:

enter image description here

My form Image:

enter image description here

My code:

введите описание изображения здесь

1 Ответ

1 голос
/ 03 августа 2020

Следующее должно научить вас всем необходимым ингредиентам.

Создайте новое приложение. Я решил создать приложение VCL, но дважды проверил, что все шаги одинаковы в Firemonkey (FMX).

Добавьте несколько полей редактирования и полей со списком, например:

Screenshot of a form with two edit boxes (

Name the controls eFirstName, eLastName, cbSex, and btnSave, respectively.

Then write the following OnClick handler for the button:

procedure TForm1.btnSaveClick(Sender: TObject);
var
  DataFile: TMemIniFile;
begin
  DataFile := TMemIniFile.Create(TPath.Combine(TPath.GetDocumentsPath, 'PersonalData.txt'));
  try
    DataFile.WriteString('General', 'FirstName', eFirstName.Text);
    DataFile.WriteString('General', 'LastName', eLastName.Text);
    if cbSex.ItemIndex <> -1 then
      DataFile.WriteString('General', 'Sex', cbSex.Items[cbSex.ItemIndex]);
    DataFile.UpdateFile;
  finally
    DataFile.Free;
  end;
end;

You need to add both IniFiles and IOUtils to your uses list (at least the implementation one).

Now, if you fill in the form,

Заполнена та же форма.

и нажмите кнопку Save, будет создан следующий файл:

[General]
FirstName=Andreas
LastName=Rejbrand
Sex=Male

Это не видно только по скриншотам, но если вы находитесь наверху, отредактируйте и нажимайте клавишу Tab несколько раз, вы go переходите ко второму окну редактирования, к окну со списком и, наконец, к кнопке. Это потому, что я убедился, что порядок табуляции правильный. Вы должны сделать то же самое.

Также обратите внимание на подчеркнутые символы. Они называются ускорителями клавиатуры . Если, например, я нажму Alt + F , фокус переместится в поле First name. Это достигается путем присвоения метке заголовка (текста) &First name: и присвоения соответствующего элемента управления редактированием свойству FocusControl метки.

В этом случае кнопка имеет вид Default, что означает, что это кнопка , которая реагирует на клавишу Enter . Если бы это не было по умолчанию (а в вашем GUI это могло бы не иметь смысла), я бы дал ему заголовок &Save и изменил &Sex: на S&ex:. Вы можете догадаться, почему?

Другие подходы

Вы также можете использовать TStringList:

procedure TForm1.btnSaveClick(Sender: TObject);
var
  DataFile: TStringList;
begin
  DataFile := TStringList.Create;
  try
    DataFile.AddPair('FirstName', eFirstName.Text);
    DataFile.AddPair('LastName', eLastName.Text);
    if cbSex.ItemIndex <> -1 then
      DataFile.AddPair('Sex', cbSex.Items[cbSex.ItemIndex]);
    DataFile.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, 'PersonalData.txt'),
      TEncoding.UTF8);
  finally
    DataFile.Free;
  end;
end;
...