午前10時起床,晴れ.大型の台風が本土接近しているという話だが,今のところはカンカン照りが続いている.朝食は薄切りパン2枚にレモンジャム.今回のレモンジャムは作り残って粒が残ってしまった.最後に残ったオブジェクト配列の問題に掛かるとしよう.この修正をパスして最終版のデバッグに転回するという選択肢もあり得るが,いずれは対策しなくてはならない部分であり,本番前のリハーサルを兼ねて試してみることにする.
オブジェクト配列を使っているのはCardBox.vbだけと思われるが,17個も実装されているので,それらを一つづつ片付けてゆくしかない.CardBox.vbを開くと「メインディスプレイのスケールは125%に設定されています.100%のスケールでVisual Studioを再起動します.」が表示され,再起動を実施すると,今度は「自動スケールがオフになっています.WPF/UWP XAMLデザイナーが正しく表示されない可能性があります.自動スケールでVisual Studioを再起動します.」が表示されて堂々巡りになってしまう.スケール値を設定している場所が見つからないので放置とする.修正が必要となるオブジェクトには以下がある.
- Nengo ComboBox Cardbox
- Check1 CheckBox Cardbox
- Yoshi CheckBox Cardbox
- KodomoSeibetu ButtonArray Cardbox
- adate Panel Cardbox
- cay TextBox Cardbox
- mei TextBox Cardbox
- nenrei TextBox Cardbox
- nonth TextBox Cardbox
- sei TextBox Cardbox
- xear TextBox Cardbox
- address TextBox Cardbox
- Kno TextBox Cardbox
- Yusen_merge CheckBoxArray MergeName
- mei_merge TextBoxArray MergeName
- regno_merge TextBoxArray MergeName
- sei_merge TextBoxArray MergeName
いや,どうもこの修正は思ったより大変だ.CardBox.vbフォームにはあらかじめ,nengo0~11のオブジェクトが配置されている.これをNengo[]という配列で統一的にアクセスできるようにしているのだが,オブジェクトの配列で個別のセルを異なる位置に配置するということができるのだろうか?いや,発想が反対だ.多分現在の実装をあまり改変せずに対応できるはずだ.つまり,①フォームのロード時にオブジェクトの配列を生成する,②SetIndexの代わりにオブジェクトを配列に代入する,という手順でよいのではないだろうか?
Nengoのオブジェクト配列からオブジェクトの配列への転換は大体できたが,オブジェクト配列はイベントを受けられるようになっているのに対し,オブジェクトの配列ではそれができない.対処できるだろうか?NengoではLeaveとSelectedIndexChangedの2つのイベントを処理している.これを個別オブジェクトのイベントハンドラから起動するようにするというのもありがたくない話だ.オブジェクトの配列は結局隠しオブジェクトになってしまうから,明らかにそれ自体のイベントというのはあり得ないように思われる.しかし,いまのところそれ以外の方法はない.とりあえず,イベントハンドラーはすべてコメントアウトして切り抜けておく.
SetIndexを実行している行をすべて書き換えて,InitializeCardBoxとInitializeMergeBoxに集約したが,まだまだ山のようなエラーが出ている.
- VB6.FixedLengthStringは廃止されている ⇒ これを使っているWriteProtect関数には疑問があるので暫定的に止めておく
- VB6.TwipsToPixelsXは廃止されている ⇒ この関数はLoadWndRectから呼び出されている.前回終了時のフォームサイズはTwips単位でレジストリに格納されている.⇒暫定的にTwipsToPixelsXとTwipsToPixelsYという関数を作って呼び出すようにした.この逆関数PixelsToTwipsX/Yも同様とする
- VB6.CopyArrayは廃止されている ⇒ 暫定,Cloneを使う
- VB6.FontChangeSize,VB6.FontChangeBold,VB6.FontChangeItalic,VB6.FontChangeUnderline,VB6.FontChangeStrikeout,VB6.FontChangeNameは廃止されている ⇒ Font.SizeはReadOnlyで書き込むことができない.