ただいま修行中...

ソフトウェア開発において、勉強中で悪戦苦闘の日々

GetFilesについて

2009-06-10 23:11:10 | C#
C#に、System.IO.Directory.GetFiles()という指定したファイルを取得するメソッドがあります。

実はこのメソッド、.NetFramework2.0からサブディレクトリまで検索してくれるのです。
下記のように、System.IO.SearchOption.AllDirectoriesを追記するだけです。

サンプルコードは下記のとおりです。

System.IO.Directory.GetFiles(@"C:\*.xls",System.IO.SearchOption.AllDirectories)

ちょっとしたツールを作成するときに発見して、再帰処理で検索しなくてはならないなと思っているときに、発見しました。

ビルドアクションについて

2009-06-08 23:03:33 | C#
Visual Studioを使用して、画像ファイルのプロパティを見ると、ビルドアクションというものがあります。

この種類には、なしや埋め込まれたリソースなどがあります。

簡単にいうと、DllやExeに埋め込まれるかそうでないかの違いがあります。

では、なしに設定している場合にも実は埋め込まれる場合があります。

それは、resxというファイルが関連していて、ここにファイルが追加されている場合には、ビルドアクションを「なし」にしなくてはなりません。

コレを「埋め込まれたリソース」にしてしまうと、2重登録されることになります。

つまり、resxに追加した場合には、「なし」で、そうでない場合には「埋め込まれたリソース」にする必要があります。

PartCoverとNUnitについて

2009-04-29 20:38:46 | C#
PartCoverNUnitを組み合わせて使用することが殆どであると思うので、NUnitを用いたPartCoverの設定は、以下のとおりです。

・Executable File:実行ファイルを設定する(NUnitの場合は、NUnitの実行ファイル名)

・Working Directory:コードカバレッジを測定したいフォルダの位置(例:テストコードdllの出力フォルダ)

・Working Arguments:コードカバレッジを測定するdllなど

・Rules:測定するDllやファイルなどで、記述は+*ですべてのファイルを追加。+[アセンブリ名]で指定する。+*で記述すると、NUnitのアセンブリも追加されてしまうので、基本は測定したいアセンブリ名を指定。(例:+[*cs*]*など)

後は、Startボタンを押して、NUnitをRunで走らせて、終了したら、NUnitを終了させれば、測定開始となります。

PartCoverについて

2009-04-28 20:44:17 | C#
.NETコードカバレッジ網羅率)を測定するフリーのツールとしてNCoverがありますが、有料化されてしました。そこで、フリーのツールである、PartCoverについて調べてみました。

PartCoverは、判定条件網羅になります。判定条件網羅とは、判定条件で真となる場合、偽となる場合をそれぞれ少なくとも1回は実行するになります。

つまり、以下のような場合です。
条件1:真、条件2:真、判定条件:真
条件2:偽、条件2:偽、判定条件:偽

ただ、これには問題点があり、実装の仕方によって100%になる場合とならない場合があります。

数学1が80点以上または国語が65点以上なら「合格」、それ以外なら「不合格」といったプログラムを作成した場合

ソースコード1:
public void 合格か
{
 get { return 数学1>=80 || 国語>=65; }
}

ソースコード2:
public void 合格か
{
 get
 {
  if (数学1>=80 || 国語>=65)
   return true;
  else
   return false;
 }
}

テストコードを、数学1が真、国語が真になるようなパターンで作成した場合に、
ソースコード1の場合には、カバレッジが100%、ソースコード2の場合には、50%になります

ツールの設定は別のところで説明をします。

C#の縦書き文字

2009-04-24 22:19:58 | C#
C#における文字を描画する際に、DrawStringメソッドを使用します。

これを縦書き文字にする場合には、StringFormatDirectionVerticalを使用すれば、簡単に縦書き文字にすることができます。

ただし、複数行の文字を縦書きにする場合には、縦書きにすると、右方向に90度回転すると思っていると、少々違っています。

文字を左から右方向に読みようになってしまいます。

複数行の文字を縦書きにする場合には独自に実装する必要があるので、注意が必要です。

C#:DataGridViewImageColumn

2009-03-11 20:53:58 | C#
C#DataGridViewのセル上にイメージを簡単に表示することができます。

まずは、カラムの設定で、DataGridViewImageColumnを使用します。

表示するイメージは、リソースファイルにしておけば、

System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
bmp = new Bitmap(asm.GetManifestResourceStream("ファイルがある場所ファイル名.bmp"));

で読み込むことができます。

後は、セルのValueに、cell[カラムのIndex, 0].Value = bmp
としておけば、簡単に画像を表示することができます。

memberwiseCloneについて

2009-01-20 21:39:12 | C#
今日、後輩のコードレビューをしていると、MemberwiseCloneを使用して、コピーをしている部分がありました。

return this.MemberwiseClone()と書いてあるので、参照型の場合に正しい結果が得られないといいました。

しかし、テストコード上では正しく動作しています。

ヘルプを調べるとわかりますが、以下MSDNの抜粋。

MemberwiseClone メソッドは、新しいオブジェクトを作成し、現在のオブジェクトの非静的フィールドをその新しいオブジェクトにコピーすることによって、簡易コピーを作成します。フィールドが値型の場合、そのフィールドはビット単位でコピーされます。フィールドが参照型の場合、参照はコピーされますが、参照先オブジェクトはコピーされないため、元のオブジェクトとその複製は同じオブジェクトを参照します。

テストコードを書いても、オブジェクトを参照するので、テストコード上では正しく動作します。

こういったものはコードレビューをしないと見つからないと思いました。

MemberwiseCloneを使用するときには注意をしなくてはならないと思いました。

internalクラスのinternal

2008-12-19 23:05:16 | C#
今日ちょっとした疑問がありました。
C#ではpublic,private,protectedの他にinternalと宣言することができます。
これは同一アセンブリ内であれば参照が可能であることです。

internalクラスにして、internalメソッドってあんまり意味がないような気がしました。

ちょっと考えたときにあまり意味がないような気がしました。

どんなときにこれって使うのかなと思いました。

Excelのオートシェイプ

2008-11-18 22:33:17 | C#
Excel2007でExcel2003形式に保存した場合に、どうしてもオートシェイプの位置がずれてしまいます。

現象を確かめようと、xlsx形式で保存して、それをxlsに保存した場合に、オートシェイプの位置が微妙にずれます。

色々と調べた結果、どうもExcel2007で、仕様変更が入ったようで、この現象がでるようです。

ちょっとこれは厳しいなというのが現状です。

これじゃ下位互換できていないのではないかと思います。

それにしてもExcelというソフトは非常にすばらしいソフトであるのに、何かしようと思うと結構扱いづらいなというのが率直な感想です。

xlsxへのオートシェイプで文字について:解決

2008-11-12 22:20:31 | C#
昨日、xlsx(Excel2007形式)のオートシェイプのフォント名が正しく設定されない件は解決することができました。

調べた結果、MicroSoftのサポート事例に掲載されていました。

以下がURLです。
http://support.microsoft.com/kb/945500/ja

回避策としては、Excel2007で追加された、TextFrame2のTextRange.Font.NameFarEastにフォント名を設定すれば、対応することができました。

つまり、Excel2007形式とそれ以外の形式では対応が違うということになります。