teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

ソース修正

2019/08/10 04:15

投稿

YAmaGNZ
YAmaGNZ

スコア10654

answer CHANGED
@@ -67,9 +67,9 @@
67
67
  Private Sub InitializeApplication()
68
68
 
69
69
  '自分以外のフォームを閉じる
70
- For i = Application.OpenForms.Count - 1 To 0 Step -1
70
+ For Each frm As Form In New ArrayList(Application.OpenForms)
71
- If Application.OpenForms(i).Name <> Me.Name Then
71
+ If frm IsNot Me Then
72
- Application.OpenForms(i).Close()
72
+ frm.Close()
73
73
  End If
74
74
  Next
75
75
 
@@ -79,4 +79,13 @@
79
79
 
80
80
  End Class
81
81
 
82
- ```
82
+ ```
83
+ ただし、サブフォームなどで、ダイアログを連続で表示するような形になっている場合はダイアログが表示されてしまいます。
84
+ 例)
85
+ ```VBNET
86
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
87
+ MessageBox.Show("テスト")
88
+ MessageBox.Show("テスト2")
89
+ End Sub
90
+ ```
91
+ とあった場合、"テスト"のダイアログで止めている場合、サブフォームが閉じた後に"テスト2"のダイアログが表示されます。

2

追記

2019/08/10 04:15

投稿

YAmaGNZ
YAmaGNZ

スコア10654

answer CHANGED
@@ -38,4 +38,45 @@
38
38
  ・最初の状態に表示されているフォームを表示する
39
39
  ・表示されているコントロール等を初期状態に戻す
40
40
  といった処理を行う関数を作成し、それを実行するという形にするのがよろしいかと思います。
41
- 初期状態にするという関数を作成すれば、Main_Loadでもこれを呼べばいいことになります。
41
+ 初期状態にするという関数を作成すれば、Main_Loadでもこれを呼べばいいことになります。
42
+
43
+ ### 追記
44
+ MainFormというフォームを作り、ボタンとタイマーを配置してください。
45
+ ボタンを押すと、サブフォームが表示され、5秒後に元に戻ります。
46
+ ```VBNET
47
+ Public Class MainForm
48
+
49
+ Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
50
+ InitializeApplication()
51
+ End Sub
52
+
53
+ Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
54
+ InitializeApplication()
55
+ End Sub
56
+
57
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
58
+ Dim form As New Form() With {.Name = $"SubForm", .Text = "サブフォーム"}
59
+ form.Show()
60
+
61
+ Me.Hide()
62
+
63
+ Timer1.Interval = 5000
64
+ Timer1.Enabled = True
65
+ End Sub
66
+
67
+ Private Sub InitializeApplication()
68
+
69
+ '自分以外のフォームを閉じる
70
+ For i = Application.OpenForms.Count - 1 To 0 Step -1
71
+ If Application.OpenForms(i).Name <> Me.Name Then
72
+ Application.OpenForms(i).Close()
73
+ End If
74
+ Next
75
+
76
+ Me.Show()
77
+
78
+ End Sub
79
+
80
+ End Class
81
+
82
+ ```

1

ソース修正

2019/08/10 03:57

投稿

YAmaGNZ
YAmaGNZ

スコア10654

answer CHANGED
@@ -9,8 +9,8 @@
9
9
 
10
10
  <StructLayout(LayoutKind.Sequential)>
11
11
  Structure LASTINPUTINFO
12
- Public cbSize As Integer
12
+ Public cbSize As UInteger
13
- Public dwTime As Integer
13
+ Public dwTime As UInteger
14
14
  End Structure
15
15
 
16
16
  Private timer1 As Timer
@@ -23,7 +23,8 @@
23
23
  info.cbSize = Marshal.SizeOf(info)
24
24
  r = GetLastInputInfo(info)
25
25
 
26
- Me.Text = $"無操作時間 = {(Environment.TickCount - info.dwTime) / 1000 }秒"
26
+ Dim span = New TimeSpan((Environment.TickCount - info.dwTime) * 10000)
27
+ Me.Text = $"無操作時間 = {span}"
27
28
  End Sub
28
29
  End Sub
29
30
  End Class