先日、INBlogger についてコメントいただいておりまして、SIP について調査をしていたのですが、正直 SIP が表示されるとフォームのクライアント領域が縮まるものかと勝手に思っていました。
意識せずに作成してしまうとフォームの上に被さるように表示されてしまい、被さってしまったところに入力コントロールなどがあると見えない状態で入力しなければならなくなります。
これってちょっと問題でフォームをバシバシ作って、入力コントロールをバシバシ貼り付けて、出来た(^-^)と思って SIP から入力をしようと思ったら入力コントロールが隠れて見えないなんてことになってしまいます。
まあ、その為に .Net Compact Framework には Microsoft.WindowsCE.Forms.InputPanel クラスがあるのですが・・・。
こんな対応方法でいいのか分からないのですが、対応方法を載せておきます。
■前準備
- From に Panel を貼り付け Dock プロパティを DockStyle.Fill にし、AutoScroll プロパティを True にする。
- From に InputPanel を貼り付ける。
- From の Activated イベントと InputPanel の EnabledChanged イベントを実装する。
■サンプル
private void inputPanel1_EnabledChanged(object sender, EventArgs e)
{
this.ResizeOfPanel();
}
private void Form1_Activated(object sender, EventArgs e)
{
this.ResizeOfPanel();
}
private void ResizeOfPanel()
{
if (this.inputPanel1.Enabled)
{
this.panel1.Dock = DockStyle.Top;
this.panel1.Size = this.inputPanel1.VisibleDesktop.Size;
}
else
{
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
}
}
INBlogger は基本メインフォームが1つで他はユーザーコントロールで作成していたので、修正はほとんど問題なかったのですが、フォームを複数使用していた場合は修正は大変ですね。
Programing
c#, windows mobile
Permalink