プロジェクトにXMLスキーマを取り込む場合の注意点
プロジェクトにXMLスキーマを取り込む場合、まずXMLファイル自体の構造に注意を払うべきです。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
プロジェクトにXMLスキーマを取り込む場合、まずXMLファイル自体の構造に注意を払うべきです。
久々の更新です。今回はVS2003/2005は対象外の話です(VS2010は対象となるか未確認)。
DrawRectangle を使用した時、描画される位置をドット単位で意識しなくてはいけない事があったので、Pen の設定によりどの様に描画されるかを書き残しておきます。
タイトルバーのないフォームの移動を行なう場合のプログラム記述については、既に他のサイトでも紹介されています。しかし、実際の使用においては補足する必要もあったので、あえて覚え書きとして残しておきます。
短くて済むので、C# Tips というより、覚え書きとして、書き残しておきます。
C#2005 以降を前提としますが、任意のマウス位置から、テキストの文字インデックスを得るものとして、GetCharIndexFromPosition プロパティがあります。また、この文字インデックスにあたる行番号を取得出来る GetLineFromCharIndex プロパティと、指定行番号の先頭文字インデックスを得る GetFirstCharIndexFromLine プロパティを使用すれば、簡単な計算で桁位置も求められます。
具体的な使用例は、以下のとおりです。
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
int index = textBox1.GetCharIndexFromPosition(e.Location);
int line = textBox1.GetLineFromCharIndex(index);
int column = index - textBox1.GetFirstCharIndexFromLine(line);
Console.WriteLine("{0}行 {1}桁", line, column);
}
ここでは、MouseDown イベントを使用したので、この様な記述となります。しかし、例えば DrapDrop イベントで使用する場合は、マウスの座標がスクリーン座標となっている為、クライアント座標に変換する必要がある事に注意します。
private void textBox1_DragDrop(object sender, DragEventArgs e)
{
int index = textBox1.GetCharIndexFromPosition(
textBox1.PointToClient(new Point(e.X, e.Y)));
int line = textBox1.GetLineFromCharIndex(index);
int column = index - textBox1.GetFirstCharIndexFromLine(line);
Console.WriteLine("{0}行 {1}桁", line, column);
}
一応備忘録に書いておきます。
.NETのアセンブリに対するバージョン情報を埋め込むには@ITの.NET TIPS アセンブリにバージョン情報を設定するには?でも紹介されていますが、当方で調査した結果等を加えた内容で、ここにまとめておきます。
前回、ちらっと汎用のFlags列挙体用プロパティエディタを作成中と発言しましたが、当然ながら汎用性を持たせる為、列挙体の型は動的に取得しなければなりませんし、最後エディタが設定した値も、動的に正しい型の列挙体にして返す必要があります。このあたり、どうやればうまくいくのか、ちょっと悩みましたので、備忘録として書き残しておきます。
簡単な事ですが、必要なときにすぐに見れる様に、覚え書きとして残しておきます。
DateTime startTime = DateTime.Now;
(計測したい処理)
TimeSpan tp = DateTime.Now.Subtract(startTime);
Console.WriteLine(tp.TotalSeconds); // 処理時間を秒単位で表示
Console.WriteLine は、通常のフォーム付きアプリケーションでも、メニューの「表示」-「出力」で、表示されるウィンドウに出力されるので結構便利です。
(11/9 追記)
.NET Framework 2.0以降なら、Stopwatch クラスが使用出来るので、これを使用した場合も書いておきます。
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
(計測したい処理)
sw.Stop();
Console.WriteLine(sw.Elapsed.TotalSeconds);
「フォルダの参照」ダイアログのコントロールID に続いて、「ファイルを開く」ダイアログのコントロールID も調査したので、覚え書きとして残しておきます。残念ながら、Windows 7 は未調査です。またVista は、日本語版を所有はしていますが、PCにインストールしていないので、VirtualPC用のVistaバーチャルディスクイメージをダウンロードして調べました。その為、英語版ですが、御勘弁を。
なおコントロールID は、WindowsAPI の GetDlgItem を使用すれば、そのコントロールのウィンドウハンドルが得られます。ウィンドウハンドルが得られれば、そのコントロールの各種制御や情報取得が出来ます。
※記事中は「ファイルを開く」ダイアログの図しかありませんが、「名前を付けて保存」ダイアログも全く同じコントロールIDである事を確認しています。
※灰色テキストのコントロールは、非表示状態にあるコントロールを示します。