タブレットPC開発入門 C#編 第19回 エディタを作る その2−VB.NETのアップグレードウィザードに頼るのも手だ

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2002年11月26日(火)版

タブレットPC開発入門 C#編 第19回 エディタを作る その2−VB.NETのアップグレードウィザードに頼るのも手だ

デスクトップ、ノートブックから、第3のスタイルへ


■ウィンドウのサイズ変更に対応する。

 今回はエディタのその2となる。前回までに作成したものはウィンドウがリサイズできるにも拘らず、TextBoxの部分はリサイズされないので格好が良くない。TextBoxの部分もウィンドウのリサイズに対応してリサイズされるよう変更を加える。

■VB.NETのアップグレードウィザードに頼る

 もし、あなたが従来のVisual Basicでアプリケーションを作成したことがあるなら、Formのリサイズでその上に貼り付けられたコントロールもリサイズするために、Form_Resizeイベントで以下のようなコードを書いていたかも知れない。


Private Sub Form_Resize()
Text1.Height = ScaleHeight
Text1.Width = ScaleWidth
End Sub

 この例ではFormに貼り付けたTextBoxのサイズを、Formのクライアント領域のサイズに合わせている。クライアント領域のサイズはScaleHeightプロパティとScaleWidthプロパティを取得すれば知ることができる。

 これをC#でやるにはどうすれば良いだろうか。Formのイベントをヘルプで調べるとResizeイベントはC#でも存在することが分かる。TextBoxにHeightプロパティとWidthプロパティも存在する。しかし、FormにScaleHeightプロパティやScaleWidthプロパティは存在しない。ヘルプにもそのようなキーワードは存在しないから調べようがない。こんなときに僕が良く使う裏技がある。

 Visual Basic6.0等の開発環境を持っていれば、の話になってしまうのだが、やりたいことをできるだけ簡潔にVisual Basic6.0で書いて、それをVisual Basic.NETのアップグレードウィザードでVB.NETのプログラムに変換するのである。VB.NETのアプリケーションもC#のアプリケーションも、最終的に.NET Framework上で動くことになるので、構文こそ違うものの、使用するオブジェクトはほとんど同じである。アップグレードウィザードはVisual Studio.NETで従来のVisual Basicプロジェクトを開こうとすると自動的に起動する。

 つまり、変換されたVB.NETのコードを見れば、同じことをC#でやりたい場合にどうすれば良いか大体見当がつく。ちなみに上記のVisual Basic6.0のコードは以下のようにVB.NETのコードに変換された。


Private Sub Form1_Resize(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Resize
Text1.Height = ClientRectangle.Height
Text1.Width = ClientRectangle.Width
End Sub

■リサイズ機能の実装

 どうやらVisual Basic6.0のScaleHeightプロパティはClientRectangle.Heightプロパティに、ScaleWidthプロパティはClientRectangle.Widthプロパティにそれぞれ相当するようである。ヘルプで調べて見ると確かにSystem.Windows.Forms名前空間にControl.Rectangleなるものがあるらしい。これを使ってEditorアプリケーションにもウィンドウのリサイズに対応する機能を組み込んでみよう。FormのResizeイベントで以下のように記述してみよう。


private void Form1_Resize(object sender, System.EventArgs e)
{
textBox1.Height = ClientRectangle.Height;
textBox1.Width = ClientRectangle.Width;
}

 こうしておけばウィンドウのリサイズに対応できるのはもちろんのこと、デザイン時もわざわざTextBoxをFormの端まで拡げておく必要はない。アプリケーションを起動したらResizeイベントが発生して勝手にTextBoxもリサイズされる。ただし、左上隅だけはきっちりあわせておく必要がある。

 似たようなイベントにLayoutイベントがあるが、ヘルプではこちらを使うように推奨しているようなので、Layoutイベントを使用して以下のように記述しても良いだろう。ヘルプを見る限りLayoutイベントのほうがResizeイベントよりも多く発生するようだ。


private void Form1_Layout(object sender, System.Windows.Forms.LayoutEventArgs e)
{
textBox1.Height = ClientRectangle.Height;
textBox1.Width = ClientRectangle.Width;
}

■利用できるものは何でも利用しよう

 今回はVB.NETのアップグレードウィザードを利用する裏技をご紹介した。これにより、ウィンドウのリサイズに対応して、貼り付けたTextBoxをリサイズする機能を実装した。使えるものは何でも利用しよう。

 ではまた次回。



タブレットPC開発入門 C#編 第19回 エディタを作る その2−VB.NETのアップグレードウィザードに頼るのも手だ

Reported by Allergy


Last-modified: Sun, 24 May 2009 23:45:30 JST (3462d)