モードレス フォームからのデータの取得

提供: RAD Studio
移動先: 案内検索

フォームからのデータの取得 への移動


モードレス フォームの情報は、フォームの public メンバ関数を呼び出すか、フォームのプロパティを問い合わせることにより、簡単に取得することができます。たとえば、色("Red"、"Green"、"Blue" など)のリストを表示する ColorListBox というリスト ボックスを含んだ ColorForm というモードレス フォームがアプリケーションにあるとしましょう。ColorListBox で選択された色の名前文字列は、ユーザーが新しい色を選択するたびに CurrentColor というプロパティに自動的に格納されます。このフォームのクラス宣言は次のようになります。

TColorForm = class(TForm)
  ColorListBox:TListBox;
  procedure ColorListBoxClick(Sender: TObject);
private
  FColor:String;
public
  property CurColor:String read FColor write FColor;
end;
class TColorForm : public TForm {
__published: // IDE-managed Components

	TListBox *ColorListBox;

	void __fastcall ColorListBoxClick(TObject *Sender);

private: // User declarations
	String getColor();
	void setColor(String);

	String curColor;

public: // User declarations

	virtual __fastcall TColorForm(TComponent* Owner);
	__property String CurrentColor = {read = getColor, write = setColor};
};

このリスト ボックスの OnClick イベント ハンドラ ColorListBoxClick では、リスト ボックスで新しい項目が選択されるたびに CurrentColor プロパティの値を設定します。このイベント ハンドラでは、色の名前を格納したリスト ボックスから文字列を取得して CurrentColor に割り当てます。CurrentColor プロパティでは、設定関数 SetColor を使用して、プロパティの実際の値を private データ メンバ FColor に格納します。

procedure TColorForm.ColorListBoxClick(Sender: TObject);
var
  Index: Integer;
begin
  Index := ColorListBox.ItemIndex;
  if Index >= 0 then
    CurrentColor := ColorListBox.Items[Index]
  else
    CurrentColor := '';
end;
void __fastcall TColorForm::ColorListBoxClick(TObject *Sender) {
	int index = ColorListBox->ItemIndex;
	if (index >= 0) { // make sure a color is selected
		CurrentColor = ColorListBox->Items->Strings[index];
	}
	else // no color selected
			CurrentColor = "";
}

// ---------------------------------------------------------------------
void TColorForm::setColor(String s) {
	curColor = s;
}

ここで、アプリケーション内の別のフォーム ResultsForm で、その ResultsForm 上のボタン(UpdateButton)がクリックされるたびに、ColorForm で現在選択されている色を調べる必要があるとしましょう。UpdateButtonOnClick イベント ハンドラは、たとえば、次のようになります。

procedure TResultForm.UpdateButtonClick(Sender: TObject);
var
  MainColor: String;
begin
  if Assigned(ColorForm) then
  begin
    MainColor := ColorForm.CurrentColor;
    {do something with the string MainColor}
  end;
end;
void __fastcall TResultsForm::UpdateButtonClick(TObject *Sender) {
	if (ColorForm) { // verify ColorForm exists
		String s = ColorForm->CurrentColor;
		// do something with the color name string
	}
}

このイベント ハンドラでは、まず、ColorForm が存在するかどうかを、Assigned 関数を使って確認します。そのあと、ColorForm の CurrentColor プロパティの値を取得します。

あるいは、ColorFormGetColor という public 関数があれば、CurrentColor プロパティを使用せずに、現在選択されている色を別のフォームから取得することができます(たとえば、MainColor := ColorForm.GetColor; など)。実際には、次のように、もう一方のフォームからリスト ボックスの選択内容を直接調べて、ColorForm で現在選択されている色を取得することは自由にできます。

with ColorForm.ColorListBox do
  MainColor := Items[ItemIndex];
String s = ColorListBox->Items->Strings[ColorListBox->ItemIndex];

ただし、プロパティを使用すると、ColorForm へのインターフェイスが非常にわかりやすく簡単なものになります。ColorForm については、CurrentColor の値を調べることさえフォームが知っていればよいことになります。

関連項目