前回、解決済みにしたので、引き続き
新規で質問します。
クリエイト部で
FUserList.OnChange := DataListChange;
とし、処理部分で以下のようにしました。
procedure TUser.DataListChange(Sender: TObject);
begin
Items.Text := FDefaultList.Text + FUserList.Text;
end;
呼び出し側では
User1.DefaultList.Add('AAA');
User1.DefaultList.Add('BBB');
で追加していくようになったのですが
同じ文字列で再度
User1.DefaultList.Add('AAA');
と、しても
DefaultListのデータの中身
(この場合期待としては'AAA','BBB','AAA'が入ってるはず)
が'AAA','BBB'のままですがどうしてなんでしょうか?
どうやらOnChangeが動作しないようです。
もちろん次に新しい項目
User1.DefaultList.Add('CCC');
を入力すると'AAA','BBB','CCC'に変更されます。
ちなみにですが、
AAA も aaa も AaA も同じみたいで追加されません。
> どうやらOnChangeが動作しないようです。
状況を単純化して確認する。
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
TestList:TStringList;
procedure TestListChange(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
TestList := TStringList.Create;
TestList.OnChange := TestListChange;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
TestList.Free;
end;
procedure TForm1.TestListChange(Sender: TObject);
begin
Memo1.Text := TestList.Text;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TestList.Add('AAA');
TestList.Add('BBB');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TestList.Add('AAA');
end;
Button2Click で、ちゃんと TestListChange が呼ばれるよ
TStringList の Sorted とか Duplicate とかのプロパティーをいじってませんか?
FDefaultList.Sorted := True;
にしています。
この行をコメントにすると追加できるようになりました。
でも、なぜSorted を True にすると
だめなんでしょうか?
ヘルプを読む。特に、Duplicates プロパティについて
Duplicates プロパティって使ったことなかったので
調べもしませんでしたが、今回はじめて知りました。
>TStringList の Sorted とか Duplicate とかのプロパティーをいじってませんか?
と書かれていても、
Duplicateを使っていなかったのでヘルプも見てなかったです。
あることすら今まで知らなかったです。
どうもすみません。
Duplicates = dupIgnore;
がデフォルト設定になっているんですね。
どうもありがとうございました。
ツイート | ![]() |