
プログラムを作っていて メニューFORMと処理FORMがあります。
処理ページでは色々な処理や表示を変えていき 処理が終わったあと
基本的にはメニューに戻るのですが。
連続して処理するときにいちいちメニューに戻るのが面倒なので
処理FORMを表示させたときと同じ状態にしようと思うのですが
色々なフレームやテキストなどを戻すソースを書くより
いわゆるメニューからボタンを押して処理FORMを表示させたときのように
やりたいのですが どのようにすればいいでしょうか?
メニューFORMをSHOW して 処理FORM をアンロードして
メニューFORMでタイマー処理か何かで自動的に
処理FORMを表示するコードを実行させる と言うようなことしか思いつきません。
これではどうもぱっとしないので リロードというかリフレッシュというか
色々見て なんかDim frm as New FormA と言うような物を使って
やると良いようなことが書いてあったのですが、今ひとつその内容が
理解できず 困っています。
そう言った方法をご存じの方がいらっしゃいましたら教えてください
よろしくお願いします。
No.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
全機能に「リフレッシュボタン」なるものが存在し、処理フォームの
レイアウトが常に同一ならば、その「リフレッシュボタン」を処理フォーム上の
下部などに設置すればユーザーコントロールは作成するだけで位置を
調整してあげる必要ない感じですね。
お礼が遅くなりました 色々やってみて
テスト環境で それとなくできるようになりました
これで少しメドが立ちました 大変助かりました
ありがとうございます。<(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
VBA、UserFormを前面に出力して...
-
ACCESS側からEXCELの書式を設定...
-
VBA メッセージボックスを自動...
-
メッセージボックスのボタン名変更
-
C#で処理中画面を表示したい。
-
アクセスでのキー送信について
-
「キャンセル」ボタン付きの処...
-
VBA kernel32 の意味
-
VC++のシンボルブラウザについて
-
for文実行中を途中で中断するに...
-
beforecloseの中からの抜け出し方
-
PostMessageの連続送信
-
VB6 コマンドボタン クリック...
-
シャットダウン時のExcel強制終...
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
TCP/IP通信時のサーバーからの受信
-
Windows上で、シグナル(SIGTERM...
-
プロセスIDの取得方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
PostMessageの連続送信
-
エクセルVBAでクリップボード内...
-
VBA、UserFormを前面に出力して...
-
ファンクションキーのキャンセ...
-
Application.ScreenUpdating=Fa...
-
【MFC】イベントの無効化について
-
VBA kernel32 の意味
-
マウスのクリックを無視したい
-
ループを使わずに、特定時間に...
-
Excel VBA 自動的に閉じるMsgBox
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
OSシャットダウン時の常駐アプ...
-
VB.NETで数秒間msgboxの...
-
VB6 コマンドボタン クリック...
-
Excel VBA 実行中に一瞬フリー...
おすすめ情報