2008年10月31日金曜日

[他]VS2005/2008のトレースポイント機能

今日、@itの記事を読んでいると、ブレークポイントならぬ、トレースポイントについて紹介されていました。機能的には、そのポイントを通過するとDebug.WriteLineのようにアウトプットに好きな文字列を出力することができます。で調べてみると、MSDNにも記事がありました。例により備忘録としてメモ。


トレースポイントを設定すると、●ではなく◆が表示されます。また、通常のブレイクポイントの設定を変更することにより、同様の機能を実現できるみたいですね。

コンパイルが不要なので、結構便利かもしれません。コード的には100%修正ミスが無いことが保障できますし。

しかし、残念ながら、ExpressEditionではサポートされていません・・・。

また、この機能はコンテキストメニューからのみ利用できるようで、ツールボタンやメニューからは利用できません。何でなんでしょう?

2008年10月28日火曜日

[.NET]WindowsFormでリサイズ時の最小値を制御する

ちょっと前にかかわったWindowsFormを使ったシステムの案件で、リサイズ時に特定のサイズより小さくできないようしてほしいとの依頼がありました。
でとりあえず、サイズ変更系のイベント(Resize,ReseBegin,ResizEnd)あたりで実現できるかなぁ。と思い、ソレらしく実装しようと考えました。
「どうせイベントの引数でキャンセルする」みたいなパターンだろうと思い、インプリメントしようとすると、それらしいプロパティが無いのです。

で調べてみると、FormにMinmumSizeというプロパティがあり、ここに値を設定するだけでした。最大値の場合はMaximumSizeというプロパティがあります。

いやー簡単に実現できたので、テストが楽にできて助かりました。

2008年10月25日土曜日

[.NET]アクティブなWindowにキー入力?

先日MSDNを斜め読みしていると、アクティブなWindowにキーストロークを送信するクラスとして、System.Windows.Forms.SendKeysというのが存在することを知りました。

用途としては、たとえばWindowsFormのテストの自動化っぽい事が可能ですね。また、何らかの都合でボタン押下相当の処理では問題場ある場合、本当にキー入力っぽく処理することも可能ですね。

Googleさんで検索してみると、VBスクリプトでも同様の機能が提供されているようですね。知りませんでした。

2008年10月22日水曜日

[.NET]カラーデータを保存する

先日、XMLに表示色(RGB)を保存するという処理を実装しました。
とりえあえず、Color.ToArgb()とColor.FromArgb()で実装したものの、人が見やすい形式であるXMLにふさわしくないなぁと思っていました。で、考えたのがHTMLの#RRGGBBの形式です。
アノ形式に簡単に落とせないかなぁと思って調べてみると、ColorTranslatorというクラスがあることがわかりました。

  • #RRGGBBからColorに変換 → ColorTranslator.FromHtml ()
  • Colorから#RRGGBBに変換 → ColorTranslator.ToHtml()

いやー便利なクラスがあるものですねぇ。

2008年10月20日月曜日

[.NET]ダブルクリックとクリックのイベントをインプリメントすると、ダブルクリック時にクリックが先に発生する

ちょっと長いタイトルですが、.NET WindowsFormアプリでマウスクリック系のイベントで困ったことが発生しました。というのは、ダブルクリックとクリックをインプリメントすると、ダブルクリック時にクリックも発生してしますのです。

処理の特性上、通常のクリック・ダブルクリックでは問題は発生しないのですが、 キーボードとの組み合わせで、


  • Ctrl+クリック:選択状態を排他的に変更

  • Ctrl+ダブルクリック:編集状態に遷移

という処理をします。この場合ダブルクリックの処理が「選択状態にを排他的に変更+編集状態に遷移」に*見えて*しまうのです。

とりあえず、クリックが排他的な処理であったため、ダブルクリックのときにクリック相当の処理を実行するようにしちゃいました。一瞬ちらつきますが、処理的にはそれらしく動作しているように*見えます*。

もうひとつの対応方法としては、


  1. クリック時にタイマー起動。タイムアウトの設定は、SystemInformation.DoubleClickTimeより取得

  2. ダブルクリックイベントが発生した場合、タイマーを停止する

  3. タイマーのイベントが発生したらクリックの処理をする


です。

しかし、コレを実装するとクリックの処理のパフォーマンスが悪く*見えて*しまいます。対処方法としてはどっちもどっち。しかし、仕組み上どうしようもないことに気がつきました。クリック時にダブルクリックかどうかは予測できませんからねぇ。

もっとよい方法はないものか考えてみたものの、よい解決案は見つかりませんでした。ということで、こんな設計するなよ!って事にしておこう。

2008年10月14日火曜日

[.NET]Excelの印刷ページ数の算出

先日COM Interopを使ったExcelを使う機会がありました。テンプレートから値をはめ込んだ後、印刷ページ数を算出し、目次を作るという処理を組んだのですが、どうもページ数が合わない。
で、いろいろ調べてみると非推奨ながらマクロを使った方法があるようなので紹介します。

//本当はコレで算出できるはずなんですが。。。
//    int hCount = getHPageBreaks(sheet) + 1;
//    int vCount = getVPageBreaks(sheet) + 1;
//
//    return hCount * vCount;


//代替の方法
    return Convert.ToInt32(sheet.Application.ExecuteExcel4Macro"Get.Document(50,\"" + sheet.Name + "\")" ));

2008年10月8日水曜日

[他]インテリセンスが英語に?

先日、C#.NET 2008 Express Edition SP1に入れ替えました。
簡単なサンプルを作っていると違和感が。。。そうなんです。インテリセンスの説明が英語になっているではないですか。なんだそりゃ。

ディベロッパー製品開発統括部 Blogによると、「また、Visual Studio の開発環境中に表示される Intellisense ですが、現在一部英語で表示される箇所があります」だそうです。っていうかほとんど英語のように感じました。

また、同じマシンにインストールしてあるC#.NET 2005 Express Editionを何気に開いてみると、なんとこっちのインテリセンスも英語になっちゃってます。2008に巻きこまれたようです。いつ直ることやら。。。