私は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. Codeigniterのデータベースの値をフォームに入力してください
- 2. コントローラにフォームの値を入力してください
- 3. 入力フォームから検索ボタンを押してください。
- 4. フォーム入力フィールドから「$」を削除してください
- 5. IDをカスタム属性としてグリッドのチェックボックスに手動で入力してください。
- 6. 入力ボックスを入力欄と同じ行に入力してください
- 7. チェックボックス動的入力フィールド
- 8. ユーザー入力に基づいてデータテーブルを入力してください
- 9. iTextのチェックボックスに記入してください。
- 10. フォームの編集時にデータベースからドロップダウンリストを入力してください。
- 11. フォームの投稿に現在のルート値/ URLを入力してください
- 12. 自動入力のものにユーザー入力を太字で入力してください
- 13. jQueryの入力をURLで入力してください。
- 14. PHPスクリプトからフォームを入力して送信してください
- 15. Rails:無効なデータにフォームを記入してください
- 16. コード内からウェブサイトにフォームを記入してください
- 17. モデルに入力されていない単純フォームにチェックボックスを追加する
- 18. Android:テスト目的のために偽のカメラプレビューを入力してください
- 19. 正確な場所にユーザ入力を入力してください
- 20. 入力に値を入れてくださいC#
- 21. ユーザーをリストに入力してください
- 22. ユーザー入力にエレガントなエラーを確認してください
- 23. PopUp Boxにテキストを入力してください
- 24. データベースに正確なデータ値を入力してください
- 25. emberモデルに追加データを入力してください
- 26. mongodbにmeteorJSサービスのデータを入力してください
- 27. メニューにテキストファイル(例:text.txt)を入力してください
- 28. ドロップダウンコントロール(C#)からgridviewにデータを入力してください
- 29. SQL Serverテーブルにテストデータを入力してください
- 30. Outlookの配布リストにドロップダウンを入力してください
'編集:= TEdit.Create(自己); Edit.Parent:= Self; Edit.Top:= NextTop; inc(NextTop、Spacing); ' –