そんちょーが村長を目指す

そんちょーのブログ

未分類

TrueDbGridで全角文字が入力できなかったのは、Refresh()が悪さしてた。

投稿日:

どうも、そんちょーと申します。

日頃からGrapeCityのTrueDbGridは動作がやや不安定で信用できないなーと感じているそんちょーなのでありますが、
先日もTrueDbGridで半角文字は入力できるのに、全角文字が入力できないということがありまして一日くらいその解決に費やしてしまったので、原因をシェアします。

同じことで悲しみを背負っている方々の助けになればと思います。

全角文字が入力できない原因は、TrueDbGridのOnKeyPressコールバック内でTrueDbGridのRefresh()メソッドを使っていたことです。

Refresh()はTrueDbGridを強制的に再描画するメソッドです。
問題が起きていたOnKeyPressコールバック内では特定のキー入力を無理矢理上書きしてカラム内の文字入力制約を拡張するみたいなゴリラみたいなことをしておりまして、上書きした内容をTrueDbGridのビューに適用するためにRefresh()を呼び出していました。

ところが、このRefresh()メソッドの動きとしては、一度TrueDbGridのキャッシュを削除してから再描画するという流れになっていて、
全角文字はOnKeyPress時では確定されていない⇨Refresh()内でキャッシュ削除される⇨全角入力情報が消えた状態で画面が描画される
ということだったのだと思います。

プログラムを弄って全角入力をするカラムを選択している時にRefresh()をさせないようにしたら正常に入力できるようになりました。

少し不思議なのが、該当コードは数年前から変わっていないことです。(私が書いたコードではない)
TrueDbGridを使用しているソリューションを最近Windows10&64bit版に対応させたことでTrueDbGridに何かバグが起きたのかもしれないです。

うーん、
そもそもこんなゴリラみたいな設計をするべきでないですね。

おしまいです。

-未分類

Copyright© そんちょーのブログ , 2021 All Rights Reserved Powered by STINGER.