- 題名: メソッドポインタを使いたい
- 日時: 2008/12/12 17:14:00
- ID: 23576
- この記事の返信元: - (なし)
 
- この記事への返信: - [23581] Re[1]: メソッドポインタを使いたい2008/12/12 18:21:37
- [23585] Re[1]: メソッドポインタを使いたい2008/12/13 23:08:18
 
- ツリーを表示
デリゲートを使うと希望の処理を実現できますよ。
 
Private Sub 新規ToolStripMenuItem_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 新規ToolStripMenuItem.Click
    共通の処理(AddressOf TextBox1.Clear)
End Sub
 
Private Sub 開くOToolStripMenuItem_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くOToolStripMenuItem.Click
    共通の処理(AddressOf OpenSelectFile)
End Sub
 
Private Sub メモ帳の終了ToolStripMenuItem_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles メモ帳の終了ToolStripMenuItem.Click
    共通の処理(AddressOf Me.Close)
End Sub
 
Private Sub 共通の処理(異なる処理 As Action)
     If TextBox1.Modified Then
         Select Case MessageBox.Show(SaveConfirmDialogMessage, SaveConfirmDialogTitle, _
                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
             Case DialogResult.Yes
                 If System.IO.File.Exists(FilePath) Then
                     FileSave()
                     異なる処理()
                 Else
                     If SaveFileDialog1.ShowDialog Then
                         FilePath = SaveFileDialog1.FileName
                         FileSave()
                         異なる処理()
                     End If
                 End If
             Case DialogResult.No
                 異なる処理()
             Case DialogResult.Cancel
          End Select
     Else
         異なる処理()
     End If
End Sub
分類:[.NET]
こんにちは。 練習でメモ帳を作っているのですが メニューの項目の[新規]でも[開く]でも[メモ帳の終了]でも 同じようなロジックが出てきます。 この時にメソッドポインタとか、そういうもので この3つをまとめることで、もっと短くすることはできないでしょうか? メソッドポインタと呼ぶのかどうかわかりませんが それの使い方を教えてください。 抜粋したソースは次のとおり。 それぞれ、TextBox1.Clear()を呼んでいるのか、 OpenSelectFile()を呼んでいるのか、Me.Close()を呼んでいるのか の違いだけで、ソースコードが冗長だと思っています。 この3つをまとめたいのです。 よろしくおねがいします。 Private Sub 新規ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 新規ToolStripMenuItem.Click If TextBox1.Modified Then Select Case MessageBox.Show(SaveConfirmDialogMessage, SaveConfirmDialogTitle, _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) Case DialogResult.Yes If System.IO.File.Exists(FilePath) Then FileSave() TextBox1.Clear() Else If SaveFileDialog1.ShowDialog Then FilePath = SaveFileDialog1.FileName FileSave() TextBox1.Clear() End If End If Case DialogResult.No TextBox1.Clear() Case DialogResult.Cancel End Select Else TextBox1.Clear() End If End Sub Private Sub 開くOToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くOToolStripMenuItem.Click If TextBox1.Modified Then Select Case MessageBox.Show(SaveConfirmDialogMessage, SaveConfirmDialogTitle, _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) Case DialogResult.Yes If System.IO.File.Exists(FilePath) Then FileSave() OpenSelectFile() Else If SaveFileDialog1.ShowDialog Then FilePath = SaveFileDialog1.FileName FileSave() OpenSelectFile() End If End If Case DialogResult.No OpenSelectFile() Case DialogResult.Cancel End Select Else OpenSelectFile() End If End Sub Private Sub メモ帳の終了ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles メモ帳の終了ToolStripMenuItem.Click If TextBox1.Modified Then Select Case MessageBox.Show(SaveConfirmDialogMessage, SaveConfirmDialogTitle, _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) Case DialogResult.Yes If System.IO.File.Exists(FilePath) Then IO.File.WriteAllText(FilePath, TextBox1.Text, System.Text.Encoding.GetEncoding("Shift-JIS")) Me.Close() Else If SaveFileDialog1.ShowDialog Then FilePath = SaveFileDialog1.FileName FileSave() Me.Close() End If End If Case DialogResult.No Me.Close() Case DialogResult.Cancel End Select Else Me.Close() End If Me.Close() End Sub