2010年1月30日土曜日

文字列のフォーマット

.net frameworkで1500という値を文字列で1,500と表示したい場合や、1,500.05と表示したい場合、下記のように記述する。

var number = 1500.05;
Console.WriteLine(string.Format("{0:N0}", number));
Console.WriteLine(string.Format("{0:N2}", number));

// Output
// 1,500
// 1,500.05

で、数字を任意のフォーマットに変更する場合、目的と合致するフォーマット文字(?NとかCとか)を調べるのが思いのほか大変だったので、msdnへのリンクを下記に記載しておく。

Formatting Overview

2010年1月29日金曜日

英単語勉強用アプリ作成シリーズ ~ WatermarkTextBox

TextBox上に何を入力するべきかのヒントとなる文字列を表示したいと思い、色々と探し回ったけれどよい物がなく、困っていたら下記のブログポストを見つけた。

WPF TextBox Watermark – The Easy Way!

上記のサイトのコードを使用してできたのが下記の画像、右上部のTextBoxだ。


解説は参照先のサイトにStyleと実際の使用方法のマークアップがあるのでそちらを参照してほしい。

他の場所で見つけたものよりかなり簡素にできて、それでいて期待通りの動作をしてくれたので大変満足だ。

英単語勉強用アプリ作成シリーズ ~ WPF雑感

WPFの懐が想像以上に深く、勉強すればするほど色々と新しい機能が発見されるので、これを存分に使いこなせるようになるにはかなり長いことかかりそうだ。コーディングをせずにXAML上のマークアップのみで大概の機能がまかなえるので、使いこなせれば開発速度の上昇はかなり見込めるけれど、経験の浅い開発者が手を出すと、手に負えないスパゲッティコードを生み出す可能性も存分に秘めている諸刃の剣だと感じた。

一通り触ってみての感触として、WPFはHTMLとの類似点が多い。HTML + Javascript + CSSに慣れている開発者ならばとっつきやすいと思う。ButtonやTextBoxなどの基本的な部品だけに限らず、コントロールとして提供されているすべての部品の描画をWindows Formsとは違い容易に劇的に変更できるのもその思いを後押ししている。

また、マークアップのみで動的な振る舞いを実現するために用意されているTrigger、Bindingを使用すれば、従来のようなイベントドリブンなコーディングをまったく行う必要がないことも特筆すべきだ。

正直敷居は高いけれど、現代的なおしゃれなアプリを簡単に実装するためのライブラリは想像以上に充実している。

2010年1月22日金曜日

Visual Studio 2008のビルド設定

つい先ほど、コンパイルは正常動作するのに実行時にコンパイルエラーが発生するという、なんともめんどくさい問題があって、その際にVS 2008のビルド設定を探すのに苦労したのでここに載せておく。

VS 2005のときには、Project menu -> Properties -> Build tabでReleaseかDebugを選べたはずなのに、VS 2008ではその項目が初期状態では見当たらない(見当たらないのはプロジェクトタイプによるかも。Webプロジェクトは初期からできた記憶があり、設定が見当たらなかったプロジェクトはWPF用だったのでその違いかもしれない)。そのために以下の項目にチェックをつける必要がある。
(VS 英語Verを使っているので以下日本語に適当に訳してください)

Tools menu -> Options -> Projects and Solutions General -> Show advanced build configurations

これで先ほどのProject menu -> Properties -> Build tabにConfigurationの項目が最上部に表示される。

2010年1月15日金曜日

英単語勉強用アプリ作成シリーズ ~ Study WPF

前回Linq To XSDについて調査をし、いよいよ実装に入ろうとしたのだが、UI周りを通常のWindowsアプリとは違う動きのあるものにしたいな、と思い立ちWindows Presentation Foundationを使うことにした。

で、MSDNのGetting Startedにも目を通したけれど、順を追っての説明がなかったのでいまいち要領を得ない。というわけで本を購入した。



すこぶる良書なのでWPFの勉強を1から行いたい人にお勧めだ。サンプルを作りながら一つ一つの機能について詳しく説明してくれるので慣れながら学べる。
※注:.Net Framework初心者用の本ではないので、読者にはC#と.Net Framework 3.5の知識が多少なりともないと厳しいと思う。

2010年1月14日木曜日

jQuery Tools - 便利なJavascript UIライブラリ

友達が動きのあるサイトを作りたいというのでjQueryでシコシコと要望のあった動きを実装していたのだが、ある領域をスクロールバー無しでスクロールさせるのが簡単に実現できなかったので、何か良いライブラリが無いかと探し回ったらjQuery UIに似たナイスなものを見つけた。

jQuery TOOLS

このライブラリのScrollableプラグインを使えばスクロールバーが無い要素でもマウスホイールでのスクロールが実現できる。そのほかにも面白い、便利な機能が多数用意されているので目を通しておいて損はないだろう。

また以前このブログポストでも紹介したようにこのサイトもCDN(Content Delivery Network)を提供してくれている。なのでこのライブラリを自サーバで保持する必要はなく下記のようにCDNのホストを参照してやるだけでよい。

<script src="http://cdn.jquerytools.org/1.1.2/jquery.tools.min.js"></script>

上記のScriptタグは最小構成なのですべての機能を使用したい場合は下記のタグに変更する必要がある。

<script src="http://cdn.jquerytools.org/1.1.2/full/jquery.tools.min.js"></script>

また使用する構成を任意に決めることもこのページからできるので、ファイルサイズを抑えたい場合は必要な構成を選択、ダウンロードし自サーバでホストすればよい。

2010年1月12日火曜日

英単語勉強用アプリ作成シリーズ ~ Linq to XSDが動くまで

英単語勉強用に使えるアプリが無いかと探したけれどびびっと来るのがないので自作することにした。行く行くはモバイル用も作って出先でも使えるようにしたいけれど、まずはWindowsアプリでざっくりと仕上げてその簡易版をモバイル用にしようと考えている。

で、元データに使えるものが無いかと探していたら良いソースを見つけたので下記のものを使うことにした。

The EDICT Dictionary File

上記のサイトでは英単語の情報がXML形式で提供されているので、そのxmlファイルをそのままDataSourceとすることにした。もちろんそのときは頭でLinq To Xmlを使(つこ)うちゃる!と息巻いていたのだが、このLinq To Xml、調べれば調べるほどに落胆の色が隠せない。というのも下記のコードを見てもらえば分かるが、Linq To Xmlでは型付けされていない情報を扱うので、何らかの値を取得するためには常にCastが必要となるからだ。

XElement root = XElement.Load("PurchaseOrderInNamespace.xml");
XNamespace aw = "http://www.adventure-works.com";
IEnumerable<xelement> address =
    from el in root.Elements(aw + "Address")
    where (string)el.Attribute(aw + "Type") == "Billing"
    select el;
foreach (XElement el in address)
    Console.WriteLine(el);

これは大変よろしくない。かなりの手間だ。そんなプログラミングは楽しくないのでわざわざ余暇を使ってする意味が無い。それなので色々とGoogle先生にお伺いを立てたらナイスなプロジェクトをCodePlexで発見した。

LINQ to XSD
(このプロジェクトを使用したい場合は17994とかそういう番号になっているLinkからソースコードをダウンロードしよう)

そう、名前からも分かるとおり、このプロジェクトを使えばXSDで強力に型付けされたClassを扱うことができる。上記のコードが下記のような感じになる。

var list_books = from c in xmlFile.Customers
                 order by c.Name
                 select c;

-------------------------
ではこれからその導入方法の説明に入ろう。Code Projectにコードのサンプルがあったので以下に併記しておく。

LINQ to XSD Sample at the Code Project

Linq To XSDを使うためには、はじめに環境変数を追加する必要があるので下記の手順どおりに追加して欲しい。

コンピュータ -> プロパティ -> システムの詳細設定 -> 環境変数 -> システム環境変数の新規ボタン
変数名:LinqToXsdBinDir
変数値:c:\LinqToXSDBin(※このパスはどこでもよい)

環境変数の追加ができたら下記の手順どおりに進めて欲しい。

  1. 前述したCodePlexのLinkからダウンロードした.zipを解凍する
  2. 解凍したフォルダの中にあるXObjects\XObjects.slnを起動しコンパイルする(先ほど設定した環境変数のパスにdllなどが出力されているのを確認すること)
  3. Linq To XSDを使用したいプロジェクトファイル(yourproject.csprojなど)をnotepadなどで開き下記の内容をコピペする。
    ※注意:必ず他のImport要素たちの後ろに追加すること(<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />など)

    <PropertyGroup>
    <LinqToXsdBinDir Condition="'$(LinqToXsdBinDir)' == ''">$(SolutionDir)</LinqToXsdBinDir>
    </PropertyGroup>
    <Import Project="$(LinqToXsdBinDir)\LinqToXsd.targets" />
  4. 上記のプロジェクトファイルをVisual Studioで起動しXSDファイルを追加する
  5. 追加したXSDファイルのビルドアクションをLinqToXSDSchemaとする
  6. プロジェクトをコンパイルするとインテリセンスが使用できるようになっていることを確認すること

これでLinq To XSDを使う準備が整った。次回以降、開発中に気付いたことなどがあれば紹介する予定だ。

2010年1月10日日曜日

ASP.NETのPathあれこれ

ASP.NET開発者なら次のようなことを経験したことがあるだろう。

「あれ?今RequestされてるパスってどのPropertyを参照すればいいんだっけ?」

というのもASP.NETのRequestオブジェクトにはやたらと似たような名前のPropertyが多い。たとえば、Url、PathInfo、PhysicalPath、ApplicationPathなどなど。一体どのPropertyに自分の探しているパスが格納されているのか名前から類推するのは難しい。Googleに聞いても求める情報がすぐに出てこないので、デバッガで実地に値を確認したりすることも往々にしてある。

そんな悩める開発者にとって朗報なのが、Requestオブジェクトのパスに関するPropertyを一覧してくれている大変有用なブログポストを発見した。英語だがリスト右側にサンプルURLが載っているので英語が苦手でもReferenceとして役に立つだろう。

Making Sense of ASP.NET Paths

これであの地道な作業から解放されると思うと心が軽い。