- 題名: メソッドポインタを使いたい
- 日時: 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