▽1
●
うぃんど ベストアンサー |
(1)原因
ShowDialog()を2回行ってますから、ダイアログは二回現れます
If sfd.ShowDialog() = DialogResult.OK Then ←1回目 System.IO.File.Copy(".\temp\BACKUP.REG", sfd.FileName, True) sfd.Dispose() End If If sfd.ShowDialog() = DialogResult.Cancel Then ←2回目 System.IO.File.Delete(".\temp\BACKUP.REG") sfd.Dispose() End If
(2)対処例
If sfd.ShowDialog() = DialogResult.OK Then System.IO.File.Copy(".\temp\BACKUP.REG", sfd.FileName, True) ELSE System.IO.File.Delete(".\temp\BACKUP.REG") End If sfd.Dispose()
(3)その他問題点
・SHELLの実行はダイアログでDialogResult.OKの時だけ実行すればいい
あらかじめ作成しておいて、OKならコピーして、
CANCELなら削除するなどは無駄な手順
・If ElseIf Else End IF の使い方がおかしい
下記2箇所は常にNoあるいはCancelであるため実行されることはない
ElseIf Windows.Forms.DialogResult.No Then ←式の結果は常にNo
ElseIf Windows.Forms.DialogResult.Cancel Then ←式の結果は常にCancel
動作確認はしておりませんが、対応例としてはおおよそ以下のような具合です
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load My.Application.DoEvents() Dim result As Windows.Forms.DialogResult Try result = MessageBox.Show("レジストリのバックアップをしますか?", "レジストリバックアップ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation) If result = Windows.Forms.DialogResult.Yes Then Dim sfd As New SaveFileDialog() sfd.Title = "保存先のファイルを選択してください" sfd.FileName = Now.ToString("yyyy.MM.dd.HHmm.ss") sfd.Filter = "REG - Windows レジストリ登録エントリ (*.REG)|*.REG;*.reg" sfd.RestoreDirectory = True If sfd.ShowDialog() = DialogResult.OK Then Shell("REGEDIT.EXE /E " & sfd.FileName & """HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Sample\""") sfd.Dispose() End If Endif If result = Windows.Forms.DialogResult.Yes Or result = Windows.Forms.DialogResult.No Then Microsoft.Win32.Registry.CurrentUser.DeleteSubKeyTree("Software\VB and VBA Program Settings\GChyde", False) MessageBox.Show("レジストリを削除しました。") Application.Exit() End If Catch ex As System.IO.DirectoryNotFoundException MessageBox.Show("レジストリの削除に失敗しました") Application.Exit() End Try End Sub
(4)余談
適当に回答されてしまってレジストリに保存することにしてしまったのかもしれませんが、
本当にレジストリに保存する必要はあるのでしょうか?
レジストリの操作に失敗するとWindowsそのものが損傷を受ける可能性だって無いとは言えませんので、
言語の基礎学習レベルの現状においてはテキストファイルへの保存からはじめたほうが安全だと思います