- PR -

WinFormのTreeViewからFormをOpen

1
投稿者投稿内容
YOSHI.H
会議室デビュー日: 2002/10/25
投稿数: 17
お住まい・勤務地: 福井県福井市
投稿日時: 2002-12-11 14:00
YOSHI.Hです。

WindowsFormにTreeView形式のメニューを作り、その内容を元に新規のFormを
起動(Show)します。ところが、新規FormがActiveFormになりません。
正確に言うと、一旦新規FormがActiveになった後、また起動元FormがActive
になっています。

どうして?

以下はSampleコードです。
TreeViewの各NodeのTagに起動Formの型を設定しています。
Nodeが選択されたら、見境無くTagの内容を起動しています。

コード:
Public Class Form1
  Inherits System.Windows.Forms.Form
〜 略 〜
  Friend WithEvents MenuTree As System.Windows.Forms.TreeView
〜 略 〜
  Private Sub Form1_Load(〜 略 〜) _
  Handles MyBase.Load
    〜 TreeView作成 〜
  End Sub

  '問題のイベント このイベントの最中は新規FormがActive
  '終了した途端に自インスタンスにActiveが戻る。
  Private Sub MenuTree_AfterSelect(〜 略 〜) _
  Handles MenuTree.AfterSelect
    If e.Node.LastNode Is Nothing Then
      Dim t As Type = Type.GetType(e.Node.Tag)
      Dim nextform As Form = _
        DirectCast(Activator.CreateInstance(t), Form)
      nextform.Show() '☆
    End If
  End Sub
End Class


Masa
会議室デビュー日: 2002/08/13
投稿数: 16
投稿日時: 2002-12-11 16:38
MenuTree_AfterSelectイベント内でnextformを開いた後もTreeViewのイベントが継続して実行されるからでは?

ちなみに、ShowDialogメソッドではnextformがActiveのままになると思います。
YOSHI.H
会議室デビュー日: 2002/10/25
投稿数: 17
お住まい・勤務地: 福井県福井市
投稿日時: 2002-12-12 13:12
YOSHI.Hです。
こんにちわ。(なんか会社で挨拶励行月間なので)

引用:

Masaさんの書き込み (2002-12-11 16:38) より:
MenuTree_AfterSelectイベント内でnextformを開いた後もTreeViewのイベントが継続して実行されるからでは?


多分そうだと思ってます。
しょうがないので、起動Formを最小化します。

# 最小化するとActivateしただけでは元のサイズにならない。
# ShowDialogではちとマズかった。

Masaさん、ご返答ありがとうございました。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2002-12-12 13:45
ListViewコンポーネントでダブルクリックされた時に発生するDoubleClickイベントを取ってFormをShowしていますが、フォーカスは問題ないです。
それなので、AfterSelectイベントではなく、DoubleClickイベントにすれば問題は解決するような気がしますね。
1

スキルアップ/キャリアアップ(JOB@IT)