回答編集履歴

3

ソース修正

2019/08/10 04:15

投稿

YAmaGNZ
YAmaGNZ

スコア10266

test CHANGED
@@ -136,11 +136,11 @@
136
136
 
137
137
  '自分以外のフォームを閉じる
138
138
 
139
- For i = Application.OpenForms.Count - 1 To 0 Step -1
139
+ For Each frm As Form In New ArrayList(Application.OpenForms)
140
140
 
141
- If Application.OpenForms(i).Name <> Me.Name Then
141
+ If frm IsNot Me Then
142
142
 
143
- Application.OpenForms(i).Close()
143
+ frm.Close()
144
144
 
145
145
  End If
146
146
 
@@ -161,3 +161,21 @@
161
161
 
162
162
 
163
163
  ```
164
+
165
+ ただし、サブフォームなどで、ダイアログを連続で表示するような形になっている場合はダイアログが表示されてしまいます。
166
+
167
+ 例)
168
+
169
+ ```VBNET
170
+
171
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
172
+
173
+ MessageBox.Show("テスト")
174
+
175
+ MessageBox.Show("テスト2")
176
+
177
+ End Sub
178
+
179
+ ```
180
+
181
+ とあった場合、"テスト"のダイアログで止めている場合、サブフォームが閉じた後に"テスト2"のダイアログが表示されます。

2

追記

2019/08/10 04:15

投稿

YAmaGNZ
YAmaGNZ

スコア10266

test CHANGED
@@ -79,3 +79,85 @@
79
79
  といった処理を行う関数を作成し、それを実行するという形にするのがよろしいかと思います。
80
80
 
81
81
  初期状態にするという関数を作成すれば、Main_Loadでもこれを呼べばいいことになります。
82
+
83
+
84
+
85
+ ### 追記
86
+
87
+ MainFormというフォームを作り、ボタンとタイマーを配置してください。
88
+
89
+ ボタンを押すと、サブフォームが表示され、5秒後に元に戻ります。
90
+
91
+ ```VBNET
92
+
93
+ Public Class MainForm
94
+
95
+
96
+
97
+ Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
98
+
99
+ InitializeApplication()
100
+
101
+ End Sub
102
+
103
+
104
+
105
+ Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
106
+
107
+ InitializeApplication()
108
+
109
+ End Sub
110
+
111
+
112
+
113
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
114
+
115
+ Dim form As New Form() With {.Name = $"SubForm", .Text = "サブフォーム"}
116
+
117
+ form.Show()
118
+
119
+
120
+
121
+ Me.Hide()
122
+
123
+
124
+
125
+ Timer1.Interval = 5000
126
+
127
+ Timer1.Enabled = True
128
+
129
+ End Sub
130
+
131
+
132
+
133
+ Private Sub InitializeApplication()
134
+
135
+
136
+
137
+ '自分以外のフォームを閉じる
138
+
139
+ For i = Application.OpenForms.Count - 1 To 0 Step -1
140
+
141
+ If Application.OpenForms(i).Name <> Me.Name Then
142
+
143
+ Application.OpenForms(i).Close()
144
+
145
+ End If
146
+
147
+ Next
148
+
149
+
150
+
151
+ Me.Show()
152
+
153
+
154
+
155
+ End Sub
156
+
157
+
158
+
159
+ End Class
160
+
161
+
162
+
163
+ ```

1

ソース修正

2019/08/10 03:57

投稿

YAmaGNZ
YAmaGNZ

スコア10266

test CHANGED
@@ -20,9 +20,9 @@
20
20
 
21
21
  Structure LASTINPUTINFO
22
22
 
23
- Public cbSize As Integer
23
+ Public cbSize As UInteger
24
24
 
25
- Public dwTime As Integer
25
+ Public dwTime As UInteger
26
26
 
27
27
  End Structure
28
28
 
@@ -48,7 +48,9 @@
48
48
 
49
49
 
50
50
 
51
- Me.Text = $"無操作時間 = {(Environment.TickCount - info.dwTime) / 1000 }秒"
51
+ Dim span = New TimeSpan((Environment.TickCount - info.dwTime) * 10000)
52
+
53
+ Me.Text = $"無操作時間 = {span}"
52
54
 
53
55
  End Sub
54
56