は私のアプリにはほとんど背景だ:Windowsフォームで深くネストされたコントロールにフォーカスを設定する最も信頼性の高い方法は何ですか?ここ
- 私は垂直SplitContainerを含むメインフォームを持っています。
- SplitContainerの左側のパネルには、TreeViewコントロールがあります。
- SplitContainerの右パネルの中に別のSplitContainer(この1つは水平)があります。このコンテナは、スプリットの上に見出しがあり、その下にPanelコントロールがある固定です。
- ツリービューが変わるたびに、自分のユーザーコントロールをPanelコントロールに動的に読み込みます。
これまでのところとても良いです。しかし、私の問題です。
動的に読み込まれるユーザーコントロールのほとんどには、コントロールの初期化時にフォーカスを受け取るDataGridViewがあります。場合によっては、このグリッドがUserControlサーフェス上に直接表示されることがあります。時にはGroupBox内にあることもあります。
可変数のコントロールコンテナ内に配置することができれば、プログラムでDataGridViewコントロールにフォーカスを設定する最適な方法は何ですか?私は明らかにしようとしました - .Select、.Focus、.ActiveControl、等これらのどれも動作するようです - 私が選択したTreeViewアイテムはまだ強調表示され、レコードがDataGridViewで選択されても、フォーカスを持っています。
すべてのアイデアをいただければ幸いです。
EDIT:
次のコードは、ここで私は、メインフォーム内でユーザーコントロールを追加するコードです:
Private Sub LoadRightPanel(ByVal section As String, ByVal moduleName As String)
Heading.Text = String.Empty
SuspendLayout()
RightPanel.Controls.Clear()
Select Case section.Trim.ToLower
Case "effective date types"
Heading.Text = "Effective Date Types"
RightPanel.Controls.Add(New EffectiveDateTypeAddEditControl(moduleName))
.
.
.
End Select
With RightPanel.Controls(0)
.Dock = DockStyle.Fill
End With
ResumeLayout()
End Sub
そして、私は、ユーザーコントロールのコンストラクタ内フォーカスを設定しようとするところ、これは次のとおりです。
Public Sub New(ByVal programModule As String)
InitializeComponent()
currentModule = programModule
UpdateGrid()
UpdateButtonSettings()
ValueGrid.Select()
End Sub
DataGridにフォーカスを設定するために使用しているコードの一部を表示できますか – msarchet
いくつかのコードを表示してください... – Tocco
ツリービューに実際にフォーカスがあるのですか、項目が重なっていますか?ツリービューにはフォーカスが失われたときに強調表示されないプロパティがあります。実際の焦点がどこであるかを見てください。また、どの時点でフォーカスをdatagridviewに設定しますか? –