☆ドッキングされたフォーム上のコンポーネントにフォーカスを当てる。
☆TDockTabSetを使ってみる。
で、作ったサンプルで、Form3にパネルとボタンを貼り付け、次のような処理を行います。
実行するとこんな感じです。(ドッキング時)
(フローティング時)
この問題を解決するために、ドッキングしているかどうかを判断させて次のような処理を行いました。
Form1への追加処理
Button1Clickを次のように変更します。 フォームがドッキングしているかどうかは、Parentがnilかどうかで判断させます。
procedure TForm3.Button1Click(Sender: TObject); var I: Integer; begin I := ListBox1.Items.Add('NewItem'); ListBox1.ItemIndex := I; ActiveControl := ListBox1; end;
実行するとこんな感じです。(ドッキング時)
(フローティング時)
コードを見ていただくとわかって頂けるかと思いますが、追加したアイテムにフォーカスを当てる処理です。 この処理は、ドッキングしていない状態の時は、動作しますが、ドッキングしているときは 次のようなメッセージが表示されます。
この問題を解決するために、ドッキングしているかどうかを判断させて次のような処理を行いました。
Form1への追加処理
type TForm1 = class(TForm) (略) public procedure FocusOnListBox; end; (略) procedure TForm1.FocusOnListBox; begin ActiveControl := Form3.ListBox1; end;
Button1Clickを次のように変更します。 フォームがドッキングしているかどうかは、Parentがnilかどうかで判断させます。
procedure TForm3.Button1Click(Sender: TObject); var I: Integer; begin I := ListBox1.Items.Add('NewItem'); ListBox1.ItemIndex := I; if Self.Parent = nil then ActiveControl := ListBox1 else Form1.FocusOnListBox; end;これで問題なく動作しました。
| 固定リンク