昨年9月から全く更新していませんでした・・・
LiveWriterがこんな便利なんやったらもっと早く使っておけばよかった orz
改めてましてあけましておめでとうございます。
本年よろしくお願いします。
昨年WindowsCE関連の開発にかかわることができました。
前半はC言語にてPGというポジション、後半はC#.NETonCEでアーキ兼サブリーダ的ポジションで貴重な勉強をさせて頂けたと思います。
その中で得た、CE関連の日本語資料の少ないところをちょこちょこ書いていければいいなーと今年は思っています。
(もうしばらくCE関連開発に携わりますし。)
とりあえず年末で納品したんですが・・・最後はほんとひどかった。
5日で3徹とか久しぶりにやりました。もう勘弁デス。
痛感したのは、いわゆる前段階でのミスを取り消すには10倍時間がかかる法則でしょうか。
特に要件定義段階でユーザとの意思疎通に大きく失敗していたため、自分のポジションでもっと意識的に動くべきだったなぁと猛省する年末でした。
反省とかはこのへんにして。
9月に「CompactFrameworkでのCausesValidation」って書いたんですが、それなりに形にまとめることができました。
結局、CompactFramework(以降CF)ではCausesValidationプロパティがいないから、CancelボタンなどでValidation実施せずに抜けることができないぢゃん!ってことへの対策ですな。
結論からいうと、ValidationのイベントをCFに任せず、コントロールのGotFocusイベント(2.0ベースの開発なもので。。)で独自実装したCausesValidationプロパティによって直前のコントロール内容を検証するってなものになりました。
まぁこれが実現できたのは「Button」と「TextBox」しか実装しないで済んだからなんですけど。
private void MyTextBox_GotFocus(object sender, EventArgs e)
{
try
{
if (this.CausesValidation && manageControl.ins.PrevControl.GetType() == Type.GetType(MyTextBox))
{
MyTextBox mt = (MyTextBox)manageControl.ins.PrevControl;
//予めコントロールに関連づけておいた検証内容を実施する
mt.ValidateData();
mt.SetNormal();
}
}
catch (MyValidateException)
{
if (manageControl.ins.PrevControl.GetType() == Type.GetType(MyTextBox))
{
//検証エラー時の動作
MyTextBox mt = (MyTextBox)manageControl.ins.PrevControl;
//一時的に検証が発生しないようにする(Nextの内容について検証が始まってしまうため)
mt.CausesValidation = false;
//エラーが発生(背景色を赤くする)
mt.SetError();
//フォーカスをセット
mt.Focus();
//フォーカスセットが完了したので検証フラグを元に戻しておく
mt.CausesValidation = true;
}
}
catch (Exception)
{
throw;
}
}
ぬー。実際のソースが手元にないから結構忘れてますな。。。
なんしかこんな感じです。実際はもっと緻密にやってますが。
とりあえず今日はこのへんで