- PR -

VB.NET2003 スケルトンコードのカスタマイズ

1
投稿者投稿内容
mkmm
会議室デビュー日: 2007/05/10
投稿数: 3
投稿日時: 2008-04-09 15:29
お世話になります。

VB.NET2003での質問です。

FormをDoubleClickすると、
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
といったスケルトンコードが生成されますが、
例えば、共通的なエラー処理コードも同時に自動生成する事は可能なのでしょうか。

Loadに限らず、全てのProcedureに共通的なエラー処理コードを
自動生成できれば、と考えています。

よろしくお願いいたします。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-04-09 21:32
引用:

mkmmさんの書き込み (2008-04-09 15:29) より:
お世話になります。

VB.NET2003での質問です。

FormをDoubleClickすると、
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
といったスケルトンコードが生成されますが、
例えば、共通的なエラー処理コードも同時に自動生成する事は可能なのでしょうか。

Loadに限らず、全てのProcedureに共通的なエラー処理コードを
自動生成できれば、と考えています。

よろしくお願いいたします。


どんなものをお考えですか?
ちなみに、VB6 までのような、 On Error Goto *** というような処理は、必要ありません。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-04-10 01:23
コード:

Public Class Form1

Public Interface TestClass1ActionListener
Sub Action1()
End Interface

Public Interface TestClass2ActionListener
Sub Action2()
End Interface

Public Interface TestClass3ActionListener
Sub Action3()
End Interface

Public MustInherit Class BaseClass
Implements TestClass1ActionListener, TestClass2ActionListener, TestClass3ActionListener

Protected MustOverride Sub DoAction()


Private Sub Action() Implements _
TestClass1ActionListener.Action1, _
TestClass2ActionListener.Action2, _
TestClass3ActionListener.Action3
Try
DoAction()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub

End Class

Public Class TestClass1 : Inherits BaseClass

Protected Overrides Sub DoAction()
Console.WriteLine("1処理で例外出しますよ")
Throw New Exception("...例外出ましたよっと(1)")
End Sub

End Class

Public Class TestClass2 : Inherits BaseClass

Protected Overrides Sub DoAction()
Console.WriteLine("2処理で例外出しますよ")
Throw New Exception("...例外出ましたよっと(2)")
End Sub

End Class

Public Class TestClass3 : Inherits BaseClass

Protected Overrides Sub DoAction()
Console.WriteLine("3の処理で例外出しますよ")
Throw New Exception("...例外出ましたよっと(3)")
End Sub

End Class

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim al1 As TestClass1ActionListener = New TestClass1
Dim al2 As TestClass2ActionListener = New TestClass2
Dim al3 As TestClass3ActionListener = New TestClass3


al1.Action1()
al2.Action2()
al3.Action3()

End Sub
End Class



こーゆー半ば強制するクラスを作るんじゃなくて?
処理する中身はそれぞれで呼び出しは統一(してもいいし、それとわかるような個別の名前でもいいし)してエラーは全部同じところで拾ってって、出来るけど。
mustoverride してるから、
public class xxx : inherits BaseClass 「改行」
って記述すると、自動的に雛形が生成されますよ。

訂正:ちょっとコード追加

訂正2:mustoverride の部分解説

訂正3:
>例えば、共通的なエラー処理コードも同時に自動生成する事は可能なのでしょうか。
上の例では、共通的なエラー処理コードを予め用意しておいて、そこを必ず通る
ようにするための仕掛けを用意する、という形になります。

訂正ばっかしですまそ。m(__)m

[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-04-10 01:36 ]

[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-04-10 01:39 ]

[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-04-10 01:44 ]
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-10 08:06
(要望とは若干違いますが)

VS2003ならプロジェクトテンプレートに登録すれば
プロジェクト選択時に自分で書いたフォームが出てきます。
(キーワード:「vsdir テンプレート」あたりで出てきます)

VS2005以降ならコードスニペット登録ができますが。。。(残念!)
mkmm
会議室デビュー日: 2007/05/10
投稿数: 3
投稿日時: 2008-04-10 11:56
お世話になります。

当初の質問が説明不足で申し訳ありません。

実現したかったのは、全てのProcedure(Sub)とFunction生成時に
独自ExceptionのCatchも含めた、プロジェクト内統一の例外処理を
自動生成するというものでした。
この必須例外処理が守られていないケースが散見される為
意識しなくても必ず挿入されれば間違いがないとの思いからです。

実現の可能性としては、
@VBのオプション機能にある、「ENDコンストラクタの自動挿入」を拡張(?)して、Procedure内の定型処理(例外処理)コードを自動挿入する方法(※Procedure(Sub)とFunction生成時に)
AX:\Program Files\Microsoft Visual Studio .NET 2003\Vb7\VBWizards
あたりのTemplate関連ファイルをカスタマイズする。
といったところを考えたのですが、行き詰ってしまったしだいです。

indigo-xさんのおっしゃるコードスニペット機能と同等の
機能があれば充分便利なのですが、そもそも例外処理を書く事自体を
意識していないケースは救えないなあと感じております。

ご回答いただきました皆様ありがとうございます。
もしまた何かヒントがございましたらよろしくお願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-04-10 13:21
引用:

実現したかったのは、全てのProcedure(Sub)とFunction生成時に
独自ExceptionのCatchも含めた、プロジェクト内統一の例外処理を
自動生成するというものでした。
この必須例外処理が守られていないケースが散見される為
意識しなくても必ず挿入されれば間違いがないとの思いからです。



であれば、そもそもはその「末端で例外をハンドリングする」スタイルがよくないです。

ロジック内では「想定される例外(=ユーザ操作によって指定されたファイルが開けなかった時「ファイルが開けませんでした」というメッセージダイアログを表示する等)」にのみ対処し、それ以外の「想定外の例外」に関しては

・Windows.Forms なら Application.ThreadException, AppDomain.UnhandledException
・ASP.NET なら Application_Error

でハンドリングする方が総合的にはよろしんじゃないかと。

仮に例外ハンドラが自動生成できたとしても、ハンドラ内のコードをハンドラを書くのを忘れてしまうような人が手書きするんじゃ、信頼性は大して向上しないと思います。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
1

スキルアップ/キャリアアップ(JOB@IT)