超初心者です。すみません、教えて下さい。
例えば、フォームにボタンを置いて、そのボタンをクリックするとフォームにラベルが追加されるようにするにはどうすればいいですか?
こんな感じです。
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
MyLabel:TLabel; // 手書きで追加
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
MyLabel := TLabel.Create(self);
MyLabel.Parent := self;
MyLabel.Left := 10;
MyLabel.Top := 10;
MyLabel.Caption := 'コードで作成しました';
end;
MyLabelを操作するときは
if not MyLabel=nil then
という風にしたほうが無難です
Ownerが設定されていますので、アプリ終了でかってに解放してくれます
>MyLabelを操作するときはif not MyLabel=nil then
作成後、別のボタンで文字を変えたりする時の事で上のソースでは不要ですよ
> if not MyLabel=nil then
そうですね。OnCreate イベントハンドラのように最初に1回だけ必ず実行される
ハンドラで作成されたならその後の確認は不要だと思いますが、そうでない場合は
インスタンスに有無を確認してから操作すべきですね。普通は
if Assigned(MyLabel) then
とすると思います。
そんな関数があったとは知らなかった..
jokさん、るるとん@Kさんありがとうございます。
返信が遅くなりすみません。
jokさんのコードできましたが、
> if not MyLabel=nil then
とすると、
この型には指定した演算子は使えません
とエラーがでます。
> if Assigned(MyLabel) then
とすると、Button1をクリックしてもラベルが追加されません。
すみません、教えて下さい。
6 Personalを使用してます。
こういうふうに使います。
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
MyLabel:TLabel; // 手書きで追加
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
MyLabel := TLabel.Create(self);
MyLabel.Parent := self;
MyLabel.Left := 10;
MyLabel.Top := 10;
MyLabel.Caption := 'コードで作成しました';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Assigned(MyLabel) then
MyLabel.Caption := 'キャプションを変更しました';
end;
Button1 を押してから、Button2 を押すと Caption が変更されます。
起動してすぐに、Button2 を押してもエラーにならないのは
if Assigned(MyLabel) then
で、MyLabel が作られているかどうか判断しているからです。
if not (MyLabel1 = nil) then
こんな感じ。
Button1 を何回おしても、最初の一回だけ MyLabel をつくるには
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(MyLabel) then exit;
MyLabel := TLabel.Create(self);
MyLabel.Parent := self;
MyLabel.Left := 10;
MyLabel.Top := 10;
MyLabel.Caption := 'コードで作成しました';
end;
とします。
if Assigned(MyLabel) then exit;
これの意味は、MyLabel が既につくられていたら、以下を実行しないですぐに
終了する、ということです。
jokさん、通りすがり(仮)さんありがとうございます。
るるとん@Kさんが、
>>MyLabelを操作するときはif not MyLabel=nil then
>作成後、別のボタンで文字を変えたりする時の事で上のソースでは不要ですよ
と書き込みされているのにButton1Clickに if Assigned(MyLabel) then を記述してました。
Button2を追加してやってみました。できました。
通りすがり(仮)さんが書き込みしてくださった
> if not (MyLabel1 = nil) then
もできました。
jokさん、るるとん@Kさん、通りすがり(仮)さん誠に有り難うございました。
これからコードエディタでF1を押しまくって勉強します。
jokさんありがとうございます。
順番が逆になりましたが、
>Button1 を何回おしても、最初の一回だけ MyLabel をつくるには
ができると思い、Button1Clickに if Assigned(MyLabel) then を記述してました。
ツイート | ![]() |