Last Updated 2011/09/21
Visual Studio 2008/2010 にがコードエディタ内にコードを挿入するコードスニペットという仕組みがあります。使い方も簡単ですから実用的です。
なお、snippet の英語としての意味は「切り取った切れ端」とか「情報の断片」です。
Visual Studio 2008/2010 にはコードスニペットが標準で付属しています。コードエディタ内の適当な位置で、for を入力したあと、[Tab] + [Tab] を押してください。以下のような for ステートメントのテンプレートが入力されるはずです。
for (int i = 0; i < Lenght; i++)
{
}
Visual Studio 2008/2010 の Express 版にこの機能はないかもしれません。確認していませんが。
スニペットのコードは、以下に示すディレクトリ内にあります(Visual Studio 2010 を標準のディレクトリにインストールした場合)。
C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\1041\Visual C#\
上記で紹介したディレクトリの中に、いろいろなスニペットがありますが、foreach スニペットを例として取り上げます。スニペットファイルはテキストファイルですからいつも使っているテキストエディタで開いてください。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>foreach</Title>
<Shortcut>foreach</Shortcut>
<Description>foreach ステートメントに対するコード スニペット</Description>
<Author>Microsoft Corporation</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>反復処理するためのコレクション内のオブジェクトの型</ToolTip>
<Default>var</Default>
</Literal>
<Literal>
<ID>identifier</ID>
<ToolTip>コレクション内の要素を表す識別子</ToolTip>
<Default>item</Default>
</Literal>
<Literal>
<ID>collection</ID>
<ToolTip>反復処理するコレクションまたは配列の名前</ToolTip>
<Default>collection</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[foreach ($type$ $identifier$ in $collection$)
{
$selected$ $end$
}]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
えらく、面倒な感じですね。しかし、各要素の意味はだいたいの想像がつくと思います。構文の詳細は、.Net Framework SDK のいかの項目の「コードスニペットスキーマリファレンス」を見てください。ただし、リファレンスを読む必要はありません。チョットのぞくだけでいいです。
Visual Studio 2010 . Visual Studio ... Visual Studio でのアプリケーション開発 ..... リファレンス ....... Visual Studio XML リファレンス ......... コードスニペットスキーマリファレンス
コードエディタ内に挿入した for ステートメントを見てどうですか。気に入りましたか。私はこういう押し付けがましさに抵抗があります。単純にコードを挿入してくれれば十分です。そこで、私の好みに合わせてコードを変更することにしました。
<Snippet>
<Code Language="csharp""><![CDATA[for (int i = 0; i < Count; ++i)
{
$selected$ $end$
}]]>
</Code>
</Snippet>
こういうふうに変更すると、単にコードを挿入するだけとなり、コードの修正をうながすピカピカはなくなります。
ピカピカ部分がまったく役に立たないとは言いません。"prop" のようにメンバ変数とそれ以外のときに対応するプロパティの宣言を書いてくれるものは便利だと思います。
もう一つ、紹介しておきましょう。OpenFileDialog オブジェクトを作成するスニペットです。
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0">
<Header>open</Shortcut>
<Description>OpenFileDialog オブジェクトの作成</Description>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Author>pmansato</Author>
</Header>
<Snippet>
<Code Language="csharp">
OpenFileDialog dlg = new OpenFileDialog();
if (DialogResult.OK == dlg.ShowDialog())
{
}
dlg.Dispose();
</Code>
</Snippet>
</CodeSnippet>
open と入力したあとに [Tab] + [Tab] キーを押すと、次の構文が挿入されます。
OpenFileDialog dlg = new OpenFileDialog();
if (DialogResult.OK == dlg.ShowDialog())
{
}
dlg.Dispose();
スニペットを自作することが難しい作業でないことを理解してもらえばいいと思います。スニペットを自分好みに変更すれば便利になります。
メッセージボックスを表示するコードスニペット名は mbox ですが、標準のコードは [OK] ボタンだけのもっともシンプルな構文になっています。これはこれで使えるのですが、もう少し色気のあるメッセージボックスも必要です。以下は、標準のスニペットをコピーして、もうひとつのメッセージボックスを定義したものです。
<Snippet>
<Code Language="csharp">MessageBox.Show("message", "caption",
MessageBoxButtons.YesNo, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button2);
</Code>
</Snippet>
既存のスニペットの <title> は "MessageBox" ですが、新しいほうは"MessageBox2" とでもしておきます。<shortcut> は "mbox"、つまり、同じにしてもかまいません。ショートカットが重複する場合に、コードエディタ内でこのショートカットを指定すると、ポップアップメニューが表示されて選択できるようになります。もし、選択が面倒であればショートカットを変えればいいですね。たとえば、"mbox2" とかです。
先に、コードスニペットスキーマのリファレンスを読まなくてよいと述べました。私は複雑さより単純さのほうを好みます。少しだけ手を貸してくれれば十分です。複雑さを好む人はリファレンスを勉強する価値はあります。そうでない人はここで説明したような手順であれば、コードスニペットを作るのは簡単であることを理解してもらえれば幸いです。
−以上−