私はDBにいくつかの商品に関する情報を持つテーブルを持っています。商品は塗りつぶし可能なので、テキストを追加することができます。だから私はテーブルの情報に関連するチェックボックスのリストを動的に生成したいし、このアイテムにテキストを追加する可能性を出すためにチェックボックスもTEditコンポーネントでなければならない。それでどうすればいい?どのコンポーネントを使用しますか?私はTTreeViewがほぼ十分であることを知っていますが、チェックボックスの近くでTEditを "描画"することはできません。私はDelphi 2010を使用しています。事前に感謝します!あなたの助けを願って!フォームにチェックボックスを動的に入力してください
答えて
質問を正しく読んだ場合は、表の内容に基づいてフォームにいくつかのコントロールを作成したいと考えています。次の例では、TDBGridの現在のレコードの内容に基づいてこれを行うことを前提としていますので、必要に応じて変更する必要があります。
この例では、実行時に作成されたコントロールを保持するTDBGridとTPanel(Panel1)を持つフォームを想定しています。
TDBGridはTDataSourceコンポーネントに接続され、その情報を持つテーブル/クエリのTDataSetの子孫に接続されます。 TDataSourceにはOnDataChangedイベントがあります。このイベントは、フィールド内のデータが変更されたとき、またはデータセット内の現在のレコードが変更されたときにトリガされます。したがって、現在のレコードの変更に合わせてコントロールを変更することができます。
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
i: Integer;
Chk: TCheckBox;
Edit: TEdit;
begin
// When the Field is assigned, the call is the result of a change in the field.
// When the Field is unassigned, the call is the result of changing the current record.
if Assigned(Field) then
Exit;
// Remove controls on panel
for i := Panel1.ControlCount - 1 downto 0 do
Panel1.Controls[i].Free;
// Add controls on panel for current record
if True then // Replace this with condition based on contents of current record (if any!)
begin
Chk := TCheckBox.Create(Self); // Set Owner, so it is freed when form is closed.
Chk.Parent := Panel1; // Set Parent, so the control is shown.
Chk.Left := FLeftIndent; // Create FLeftIndent as a member field of the form, set value in OnCreate.
Chk.Top := FNextTop; // Create FNextTop as a member field of the form.
Inc(FNextTop, FSpacing); // Create FSpacing as a member field of the form, set value in OnCreate.
if True then // Replace this with condition that dictates creation of Edit
begin
Edit := TEdit.Create(Self);
Edit.Parent := Panel1;
Edit.Left := Chk.Left + Chk.Width + FSpacing;
Edit.Top := Chk.Top; // Add offset as needed for proper alignment of CheckBox and Edit.
end;
end;
end;
フォーム上の他のチェックボックスや編集を持っていない場合、あなたは適切なVCLユニットを自分で含める必要がありますのでご注意ください。これを行う最も簡単な方法は、フォームにドロップしてフォームを保存し、コントロールを再度削除することです。
+1おそらく、動的に作成された編集ボックスをDBフィールドで識別して、エディットボックス内のユーザーの変更にコードが対応できるようにする必要があります。 –
@David:はい、それは私が追加したいと思うこの最初の追加されます... –
あなたの完全な答え、マージャンありがとう!あなたが提供する方法は、私が最初に実装すると考えた方法です。私はもっと簡単な方法があると思ったが、あなたはその方法を確認する。再度、感謝します! – kseen
try this実行時にチェックボックスを作成する例は、動的に位置を変更する必要があります。編集を含むチェックボックスを含む新しいコンポーネントを作成するか、必要な場所で動的にTEditを作成することができます。
TCheckboxの配列とTEditの配列を作成し、Editフィールドが必要な場合に条件をコード化するIsEditNeededブール関数のようなものを使用して、各Editのvisibleプロパティを設定することを検討してください。
いいリソースですが、リンクした例は、標準のウィンドウダイアログにチェックボックスを追加することです。確かに、質問から、しかし私は推測するだけで、自分のフォームで実行時にコントロールを作成したいと思います。 –
ExGridViewのようなグリッドビューを使用してチェックボックスを描画し、各行の「編集」コントロールを私に任せてみたいです。しかし、実際にグリッドの代わりにエディットボックスが必要な場合は、コントロールグリッドのアプローチ(1つのチェックボックス+ 1つのエディットコントロール、コントロールグリッド)を試すこともできます。
- 1. フォームに数値を動的に入力してください
- 2. タイプ入力を動的に変更してください
- 3. チェックボックスにチェックイン情報を入力してください。
- 4. リストのチェックボックスを動的にチェックしてください
- 5. Codeigniterのデータベースの値をフォームに入力してください
- 6. 編集フォームにSelect2フィールドを入力してください
- 7. popup.htmlのデータをフォームに入力してください
- 8. コントローラにフォームの値を入力してください
- 9. URLをSelectフォームに入力してください
- 10. 動的に入力されたセレクトボックス値を選択してください。ajax
- 11. 今日の日付に自動的に入力してください
- 12. htmlunitでASP動的ページのフォームに記入してください
- 13. bootstrap:タブに行を動的に挿入してください
- 14. 動的JavaScriptの値をhtmlテキストに入力してください。
- 15. 鉄製フォームは入力時に入力しないでください
- 16. cURLスクリプト$ urlに入力値を入力してください
- 17. 入力ボックスにjavascriptを入力してください
- 18. フォーム入力フィールドから「$」を削除してください
- 19. 入力フォームから検索ボタンを押してください。
- 20. 動的表にデータを挿入してください
- 21. IDをカスタム属性としてグリッドのチェックボックスに手動で入力してください。
- 22. チェックボックス(ListView)の値をデータベースに挿入してください
- 23. チェックボックス動的入力フィールド
- 24. .exeファイルを起動し、自動的に "Enter"を押してSASの "Save"を入力してください
- 25. を入力してください。
- 26. 入力ボックスを入力欄と同じ行に入力してください
- 27. iTextのチェックボックスに記入してください。
- 28. フォームの投稿に現在のルート値/ URLを入力してください
- 29. フォームの編集時にデータベースからドロップダウンリストを入力してください。
- 30. Google Appsスクリプトから事前にGoogleフォームを入力してください
'編集:= TEdit.Create(自己); Edit.Parent:= Self; Edit.Top:= NextTop; inc(NextTop、Spacing); ' –