プロが教えるわが家の防犯対策術!

プログラムを作っていて メニューFORMと処理FORMがあります。

処理ページでは色々な処理や表示を変えていき 処理が終わったあと
基本的にはメニューに戻るのですが。
連続して処理するときにいちいちメニューに戻るのが面倒なので
処理FORMを表示させたときと同じ状態にしようと思うのですが
色々なフレームやテキストなどを戻すソースを書くより

いわゆるメニューからボタンを押して処理FORMを表示させたときのように
やりたいのですが どのようにすればいいでしょうか?
メニューFORMをSHOW して 処理FORM をアンロードして
メニューFORMでタイマー処理か何かで自動的に
処理FORMを表示するコードを実行させる と言うようなことしか思いつきません。

これではどうもぱっとしないので リロードというかリフレッシュというか
色々見て なんかDim frm as New FormA と言うような物を使って
やると良いようなことが書いてあったのですが、今ひとつその内容が
理解できず 困っています。

そう言った方法をご存じの方がいらっしゃいましたら教えてください
よろしくお願いします。

A 回答 (1件)

どういうフォームの挙動をしているのか分かりませんが、イメージで。



・Menu(メニューフォーム)
・Process(処理フォーム)

とあった時、処理フォームを汎用的に利用させます。
たとえば「ABC登録機能」なるものが存在した場合
それに特化するユーザーコントロールを作成します。
つまり処理フォームと呼ばれるのは、機能を表示する為だけの
インターフェース的役割を担います。

・AbilityAbcRegister(ABC登録機能用ユーザーコントロール)

それを処理フォーム上で動的にオブジェクトを生成して利用させます。

VB6でそういうのが出来るのかわからなかったので試しにやっちゃってしまいました。
【Process(Command1、Command2が存在)】
Private Const USER_CONTROL_NAME As String = "UserControl"

'作成契機
'メニューで指定された機能を生成(テスト的にとりあえずなんか作成)
'違いがわかるように表示位置を変更
Private Sub Command1_Click()
  createUserControl("AbilityAbcRegister").Left = 500
End Sub

'リフレッシュボタン
Private Sub Command2_Click()
  Dim pControl As control

  'ユーザーコントロールが存在する場合は削除
  Set pControl = findControl(USER_CONTROL_NAME)
  If Not pControl Is Nothing Then
    Call createUserControl(TypeName(pControl))
  End If
End Sub

'ユーザーコントロールの作成
Private Function createUserControl(controlName As String) As control
  Dim pControl As control
  Dim pUserControl As control

  Set pUserControl = Nothing

  'ユーザーコントロールが存在する場合は削除
  Set pControl = findControl(USER_CONTROL_NAME)
  If Not pControl Is Nothing Then
    Call Me.Controls.Remove(pControl.Name)
  End If

  'ユーザーコントロールの追加
  Set pUserControl = Me.Controls.Add(App.EXEName & "." & controlName, USER_CONTROL_NAME)
  pUserControl.Visible = True

  Set createUserControl = pUserControl
End Function

'ユーザーコントロールの検索
Private Function findControl(controlName As String) As control
  Dim pControl As control

  Set findControl = Nothing

  'ユーザーコントロールが存在する場合は削除
  For Each pControl In Me.Controls
    If StrComp(pControl.Name, controlName) = 0 Then
      Set findControl = pControl
      Exit For
    End If
  Next
End Function

【AbilityAbcRegister(Command1、Text1が存在)】
Private Sub Command1_Click()
  MsgBox "aaa"
End Sub

全機能に「リフレッシュボタン」なるものが存在し、処理フォームの
レイアウトが常に同一ならば、その「リフレッシュボタン」を処理フォーム上の
下部などに設置すればユーザーコントロールは作成するだけで位置を
調整してあげる必要ない感じですね。
    • good
    • 1
この回答へのお礼

お礼が遅くなりました 色々やってみて
テスト環境で それとなくできるようになりました

これで少しメドが立ちました 大変助かりました
ありがとうございます。<(_ _)>

お礼日時:2009/01/23 02:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!