C++ Builder XE4, 10.2 Tokyo > 설정 > TComboBox 저장 > Items 및 ItemIndex 저장 > TMemo + TEdit

운영 환경
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/05)

TComboBox 설정을 저장하고 읽는 방법은 무엇입니까?

TComboBox에서는 Items와 ItemIndex를 다루게 된다.
Items를 다시 쓸 때 ItemIndex는 지워집니다.
따라서 Items를 먼저 ItemIndex를 읽어야합니다.

TMemo에 Items를, TEdit에 ItemIndex를 읽고, 그것을 TComboBox로 설정하는 방법은 생각해 본다.

Unit1.h
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE で管理されるコンポーネント
    TButton *B_save;
    TComboBox *CMB_profile;
    TLabel *Label1;
    TEdit *E_ItemIndex;
    TLabel *File;
    TMemo *M_Items;
    TButton *B_load;
    void __fastcall B_saveClick(TObject *Sender);
    void __fastcall B_loadClick(TObject *Sender);
private:    // ユーザー宣言
public:     // ユーザー宣言
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    CMB_profile->Items->Clear();
    CMB_profile->Items->Add(L"DeltaFlyer");
    CMB_profile->Items->Add(L"DeltaFlyer2");
    CMB_profile->Items->Add(L"Voyager");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_saveClick(TObject *Sender)
{
    M_Items->Lines->Assign(CMB_profile->Items);
    E_ItemIndex->Text = IntToStr(CMB_profile->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_loadClick(TObject *Sender)
{
    CMB_profile->Items->Assign(M_Items->Lines);
    CMB_profile->ItemIndex = StrToIntDef(E_ItemIndex->Text, -1);
}
//---------------------------------------------------------------------------





비고



항목에 공백이 있어도 문제 없다.

하나의 TComboBox에 대해 두 개의 구성 요소가 추가로 필요합니다.

TComboBox의 사용하지 않는 프로퍼티를 사용하는 방법도 생각할 수 있지만, 그것을 하면, 그 프로퍼티를 사용하게 되었을 때에 대처가 필요하게 된다.

좋은 웹페이지 즐겨찾기