ErrorProviderの自分メモ

.NET Frameworkの流儀に従うならば、バリデーションチェックはErrorProviderクラス(System.Windows.Forms)を使うのが粋ってものらしい。

ならば一度使ってみるかと思い初体験してみた :) え、今まで何で使ってないんだって…C#でバリデーションの必要なUI作るの初めてだし、Compact Frameworkにはないしね~と言い訳 ;)

デモプログラムなんで、入力は一箇所だし非常に簡単なので以下のあたりを参考に適当に実装してみた。

ほぉ、簡単にできるなぁ~入力異常時に表示されるデフォルトのアイコンがちょっとウザイけど…まぁ、こんなもんだろうと。

ところが…エラーがある状態だとウィンドウクローズでプログラムの終了ができない罠 :shock:

フォームのAutoValidateプロパティがデフォルトでEnablePreventFocusChangeになっているためのようです。かと言って、他のに変えるのも面倒だし…と言うことで検索。

おぉ、すごいちゃんとカスタムコントロール化してる人が居るじゃないですかぁ。

ちょっとソースを拝見…ここまでのものは今は要らないけどテストプログラムも付いてるので動きを見るのに最高です :!:

で、少し追ってみると :idea: なるほど、エラーがある状態でもプログラム終了できるようにしたければ…フォームのCloseingイベントでe.Cancelをfalseにしちゃえば良いみたいですね ;)

C#クックブック 第3版 C#クックブック 第3版
鈴木 幸敏

絶対現場主義Visual C#実践講座―開発の現場から生まれた実践テクニック&TIPS集 LINQテクノロジ入門~Microsoft Visual Studio 2008による新たなクエリ構築技法~ (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ) (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ) Microsoft Silverlight 2テクノロジ入門 (マイクロソフト公式解説書) C#エッセンシャルズ 第2版 プログラミングMicrosoft ASP.NET 3.5 (マイクロソフト公式解説書 Microsoft Visual Studi)
by G-Tools

TrackBack URL :

FxCop 1.36…少し使ってみた、手ごわいなぁ

Code Analysis Team Blog : FxCop 1.36 Released!と言うことで、FxCopが1.36になっていたので試してみた。

「Microsoft StyleCop 4.3(C#静的解析ツール)リリース」で書いたStyleCopはソースコードから解析するが、FxCopはCIL(Common Intermediate Language)側から静的解析するツール。なので、C#以外でも使えるのが良いですね ;) 当然、CILにはインデントやコメントetc.の情報は含まれてないので、FxCopとStyleCopの棲み分けはチャンとあります。

Microsoft FxCop 1.36からダウンロードして、とりあえず単体のアプリケーションとして使ってみた。

警告、警告、警告、警告、警告…

うがぁ~警告が一杯 :roll: うへ、確かにそうです…わたしが悪いですって指摘が一杯 :cry:

でも、これを全部直すのは結構面倒だなぁ~FxCop手ごわいなぁ :arrow:

しかし、コンストラクタでメンバー変数をゼロで初期化してたらCLRが自動でやってるから、パフォーマンス落ちるから書くなって言われるのね。ふ~ん :|

で、どうせならVisualStudioに組み込みたいってことで…「豆魂 – 技術記事-VisualStudio2005とFxCopを利用した静的コード分析(1)」を参考にさせてもらって設定してみました。

さて、どこまで警告がなくなることやら :mrgreen:

TrackBack URL :

P/Invokeをお便利に?

ここのところ、C#でコードを書くことが多くなってきてます。

マネージドコードだけで書ければ、それが一番幸せなのですが…残念ながら、現状では動的ライブラリ(DLL)内のネイティブコードを呼び出さないとどうしょうもない壁に結構ぶちあたります :|

そんな時に使うのが、P/Invoke(Platform Invoke、プラットフォーム呼び出し)なんですが…結構、面倒臭いんですね~コレが。

まぁ、pinvoke.netで調べるのが王道なんですかね :?:

ブラウザでpinvoke.netにアクセスして、検索とかで調べて~コードをコピペするという結構面倒な手間を楽にしてくれるのが…Red Gate Softwareが提供してくれているVisual Studio内から、直接pinvoke.netへアクセスできるようにしてくれるVSアドオンです ;) このアドオンは、メールアドレスなどの登録は必要ですが…試用期限もなくフリーで利用できます。

VSのメニューから以下のようなダイアログを呼び出し、検索して即コードを挿入できるので非常に快適になります。

Invoke Addon

あと、ローカルで動作するPInvoke Interop Assistantというツールもなかなかお薦めです ;)

大きく3つの機能を持っていて、それぞれ以下のような感じで使えます。

Invoke Spy

EXEやDLLを開いて、その中で使われているアンマネージ・シグネチャの一覧が表示できます :!:

Invoke Search

定数やAPIを検索して、P/Invoke用のコードを表示できます :!:

Invoke Code

P/Invokeしたいネイティブコードから、P/Invoke用のコードを表示できます :!:

でも、たまにナイものがあるんですよね~ :cry:

TrackBack URL :

コードクローン…CCFinder

まぁ、コードクローンは悪者扱いなんですが…個人的には、あまり神経質になるほどの問題ではないと思ってたりする。

CodeClone

でも、C#で本番コードを書くのは初めてだし静的解析とかのついでにコードクローンもチェックしておくかと ;)

コードクローンを検出するなら、ユーザ登録や1年ライセンスなど気に入らないところはあるものの。一番キモチ悪かったライセンス条項が外れたので以下のツールを使ってみた。

解析簡単にできるね~散布図で全体の雰囲気を確認 :roll: ありゃ~真っ黒な部分があるよ…クローンだらけ :?:

と思ってみたら、VSのデザイナーが吐き出したリソース周りのコードとかだった :)

しかし、この結果を見てどのように立ち回れば良いか非常に難しいのであくまで参考に留めることで満足してしまいましたとさ :arrow:

TrackBack URL :

なんとSandcastleのソースが公開された

以前、『C#のドキュメント定番は砂の城?』でも触れましたが、Codeplexに置いてるのにソースが公開されていないと指摘されたSandcastleですが…なんと、ソース公開と共にCodeplexに帰ってきました ;)

やるね~Microsoft :mrgreen:

で、早速ソースを眺めてみた(読んだわけじゃないです :arrow: )。予想通り、記述はC#で行われていた。

でも、XMLコメントが書かれてない :)

紺屋の白袴状態ですね :roll:

TrackBack URL :

Google C++ Style Guide

Google Codeでgoogle-styleguideが公開されてる。今のところ公開されているのは、以下のC++のものだけですが…順次公開されるのかな :?:

ほぉ、インデントはスペースで2文字なんですね~1行80文字制限とかもあるんだぁ~return文にはカッコは付けない派なのね~とか :)

あと、switch文は以下のように書くとか…結構、特徴的 :?:

switch (var) {
  case 0: {  // 2 space indent
    ...      // 4 space indent
    break;
  }
  case 1: {
    ...
    break;
  }
  default: {
    assert(false);
  }
}

まぁ、Googleスタイルに合わせるつもりはないですが…結構、コーディング規約って面白いので好きだったり :arrow:

We do not use C++ exceptions┳

追記 2008-07-02 13:47
変電工 – Google C++スタイルガイド日本語訳と言うことで日本語訳されてます ;)

追記 2008-12-22 16:55:03
Google C++スタイルガイド 日本語訳 | textdropで完訳されていますね~例外の使用に関する賛否など色々な規約の背景がわかって、さらに面白いですね ;)

TrackBack URL :

AnkhSVNとTotoiseSVNでハマる

VS2005の中からSubversionを操作したい。そんな欲求に答えてくれるのが、AnkhSVNというVS向けのアドオンです :)

まぁ、Subversionを使い初めてから主にJavaに関わっていたので、EclipseでSubversiveプラグインを使ったり。あとは、Windows上からTortoiseSVNを使ってエクスプローラからとか、svnコマンドとか。

でも、やはりIDEの中から使えないと不便なのでAnkhSVNをダウンロードしてインストールしてみた。

ありゃ、エラーダイアログが…orz

なんか、検索してみるとローカルにSubversion本体が入っているとエラーになるような記述がチラホラ…って入ってるよぉ~オレのマシン :shock: と言うことで、安定版の1.0.2系(これには日本語化されたものもある)をあきらめて…ダメもとで1.0.3系のpre-release版を入れてみた。

うげ、同じエラーダイアログが…orz

うぐぅ…ローカルのSubversionを消したくはないし、もう行けるところまで行けと言うことでAnkhSVN:Daily Releasesで2.0系(6/10版)を入れてみた :mrgreen:

お、エラーでないよぉ~動いたよぉ!

と喜んだもつかの間…VS + AnkhSVNからSubversionを操作すると、そのフォルダをTortoiseSVNから操作できなくなる問題が発生 :shock: クライアントのバージョンが古いとか何とか言ってエラーダイアログがでる :?

なんで :?: と思って調べると管理用の.svnフォルダ内のformatファイルの番号とentriesファイルの形式が、8から9に…要するにAnkhSVN 2.0系とTortoiseSVN 1.48系の管理形式が違うのでエラーになると :(

設定とか探してみたけど、その辺りを変えるモノが見当たらなかったので…もう思い切って、TortoiseSVN 1.5.0-RC3がでてるので…ダメ元でインストール :roll:

陸亀SVN 1.5系なら、新形式にも対応してたよ!

と言うことで、AnknSVNはDaily Releases版だし、TortoiseSVNまでRC版になるわで、もう完全自己責任モードなのですが…とりあえず動いているようです :)

以下は参考まで。

  • AnknSVNは2.0系になってUIがかなり変更されて、とても使いやすくなってます
  • TortoiseSVNも1.5系になって、劇的ではないものの色々進化しています

どちらも正式版が待ち遠しいですね :)

Subversionハンドブック (Handbookシリーズ) (Technical Handbook Series 11) Subversionハンドブック (Handbookシリーズ) (Technical Handbook Series 11)
team-thoth


by G-Tools

TrackBack URL :

C#のドキュメント定番は砂の城?

『VSのXMLドキュメントファイル』の続きエントリです :| 結局、VSから吐き出されるXMLファイルだけではどうにもならないことが判明。と言うことで調べてみた。

Javaには、JavaDocという超定番のドキュメント作成の仕組みがある…では、C#にはC#Docとか.NETDocとかはないのか :?:

Google先生に尋ねてみると…以下のようなものが引っかかってきた。

  1. Sandcastle
  2. Ndoc
  3. C#仕様書工房
  4. A HotDocument

ふ~ん、3は富士通製で昔近くの人が使っていた記憶が…ありゃ、もう終焉を迎えつつあるようなので除外。2のNDocもメンテされていないので除外。A HotDocumentも良くわからないが高いので除外 :mrgreen:

と言うことで、やはり選択肢はSandcastle(砂の城)ですか :? あ、個人的にはDoxygen好きなのですが…別の理由から却下されちゃいました :cry:

仕方ないので、Sandcastleを使うべくSandcastle Help File Builderもインストールして出力の日本語化なんてページもあったので参考にしてゴニョゴニョ。

はい。確かになかなか良くできています :) 出力は、MSDNチックな形式でchm形式かHTML形式で行えます。

サンプルを変換した雰囲気は以下のような感じ。

しかし、印刷や変換が意図した通りにできないorz

JavaDocには、Docletという手段が提供されていて色々調整ができますが…SandcastleにはDocletに相当する機能はないのかな :?:

某所のお客さまは、Word文書じゃないとダメなのでなんとか変換しようとガンバッテみたのですが…CHM2WORDとかPDFにしてみたりとか…でも、どうしても望んだ形式にならない :cry:

とチャレンジしていたら…お客さまからの鶴の一声…

リバースはダメだ!ちゃんと、Wordで書け

時代錯誤も良いとこですが…抵抗しようがないですね :cry: まぁ、今後のこともあるのでコメントはちゃんと書いてリバースできるようにはしておくしかないな。

JavaDocのDocletに相当する機能やSandcastleの出力を綺麗にWordかPDFに変換する方法があれば教えてください。

あSandcastleじゃなくても、もちろん構わないです ;)

追記 2008-06-12 15:21:58
なんだか、ソース公開してないのにCodePlexに置くなぁ~という理由で一時的にSandcastleの公開が停止しているとのこと。via. InfoQ: オープンソースの違反により、MicrosoftがSandcastleを削除

追記 2008-06-13 10:40:17
ココで再公開されています。やっぱり、コードまでは出さなかったかぁ~残念 :|

TrackBack URL :

VSのXMLドキュメントファイル

C#に本気ではないものの片足を突っ込んでみた。JavaにはJavaDocという便利なものが…C#には :?: あ、なんかXMLドキュメントがあるよぉ~と言うことで。

MSDNに在った「XMLドキュメントのサンプル」をダウンロードしてVisual Stdio 2005で、サンプルページの手順に従ってXMLドキュメントファイルを生成してみた。

なんか、良くわからないXMLだなぁ~それは仕方ないとしても…可視性(public, protected, private)の区別がないような気がするなぁ :?:

仕方ないので、prptectedとprivateを追加して再度XMLドキュメント生成してみた。結果は以下のようなXMLになった。

< ?xml version="1.0"?>
<doc>
    <assembly>
        <name>XMLdoc</name>
    </assembly>
    <members>
        <member name="T:SomeClass">
            <summary>
            クラス レベルの概要をここに挿入します。</summary>
            <remarks>
            もっと長いコメントは、remarks タグを使用して型または
            メンバに関連付けることができます。</remarks>
        </member>
        <member name="F:SomeClass.myNamePublic">
            <summary>
            name プロパティの格納場所 public</summary>
        </member>
        <member name="F:SomeClass.myNameProtected">
            <summary>
            name プロパティの格納場所 protected</summary>
        </member>
        <member name="F:SomeClass.myName">
            <summary>
            name プロパティの格納場所 private</summary>
        </member>
    (省略)
    </members>
</doc>

可視性によって、XMLドキュメント(タグ)が全く変化しませんね :shock: 当初は、吐き出されたXMLをXSLTとかを書いて整形してあげれば簡単に加工ができるものと思っていたのですが…わたしが甘かったです :roll:

どうも、リフレクションとかで調べろってのかMicrosoftのスタンスのようです。『方法 : XML ドキュメント機能を使用する (C# プログラミング ガイド)』のメモに以下のように書かれてる。

XML ファイルでは、型やメンバに関する完全な情報は提供されません。たとえば、XML ファイルには型情報が含まれていません。型やメンバに関する完全な情報を得るには、ドキュメント ファイルを実際の型やメンバのリフレクションと共に使用する必要があります。

なんじゃ、そりゃあ!

そのためにSandcastleとかあるわけですね…と言うことで珍しくエントリが続くかも知れない ;)

でも、VSの生成するXMLドキュメントってこんなんで良いの :?: 教えてエロイ人。

TrackBack URL :

日本でもDreamSparkがはじまったようです

以前、『Microsoft DreamSpark…とりあえず日本は蚊帳の外』と書きましたが…ようやく :?: 日本でもはじまったようです。

Microsoft DreamSpark(MSKK)

以下が現時点で、無償ダウンロードできる製品です。

  • Visual Studio
  • Expression Studio
  • Windows Server 2003
  • SQL Server Developer Edition
  • XNA Game Studio 2.0
  • XNA Creators Club Membership

う~ん、もうチョット広げろという気もするわけですが…学生さんうらやましい。なお、学生であることを証明するために国際学生証ISICカードが必要なようですね。

あと、現時点の対象学生は、大学院生、大学生、専門学校生、高等専門学校生の4,5年生です。予定では高校生まで広がるはず。

まぁ、個人的にはLinuxやBSDでガリガリやって欲しいですけどね :mrgreen:

TrackBack URL :