Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

AutoTab機能の実装問題

商品コード(半角5桁)の入力欄があるとします。5桁目を入力したら,商品コードの次の欄にカーソールを自動移動させる機能のことです。
この要望は、汎用機システムをダウンサイジングする際、よく登場します。
汎用機のデータエントリー系のオンライン画面では, ごく当たり前にこの機能は実装されてます。
理由としては、データ入力は右手はテンキーのみに常駐し,左手は伝票の束に常駐させるスタイルが定着しています。
この背景から、エンターキーによる項目飛ばし問題が頻繁に起こると思っています。
エンターキーのキーストロークすら手間だというので, Autotab機能が好まれるようです。
 汎用機でのカーソル制御は端末シュミレータが行っており,アプリとは別次元でコントロールされますので,アプリへの負担はありません。

クラサバアプリで実現可能なのか?
プロパティ設定では無理。( 断言してますが、私が知らないだけだったら御免なさい。教えて下さい。)
WinFormでは Textboxのmaxlangth で可能かな? と思いましたが、指定文字以上の時、制約が働くが、Eventは発生しない。
ChangeEvent等を使って作り込めば出来なくはない。MaskedTextBoxを使えばEventが起こるので、こちらの作り込みはTextboxより楽。しかし、いずれにしても、Event内でカーソル制御することになるので、如何なものかと思います。
(Access.VBAではできるそうな。なまじできているから、できない言ったら、技術力を疑われたりするからヤになってしまう。)

Webアプリではどうか,こちらも、Maxlengthプロパティはありますが, Eventはない。標準機能では無理。
Eventでサーバー処理させるは非現実的です。Javascriptで作ると可能か? changeEvent等をハンドリングすれば可能だか、業務使用の場合、セキュリティの都合でScriptをOffにしていたりするので、Scriptに依存するのも考え物。
結局無理ということにしています。
ところが、世の汎用機ユーザーに提案する時に、この辺りの説明が抜け落ちたりしているので、結果として、使い難くなったとの評価されることがあります。
WebはWebの,クラサバはクラサバの制約があるっことを、ダウンサイジング提案者は認識して欲しいモノです。ハイ。
かくも難しきは、共通認識。

投稿日時 : 2007年3月16日 11:52

Feedback

# re: AutoTab機能の実装問題 2007/03/17 2:53 koka

こんばんわ。
根本的な問題として、提案者が実装部分を知らなさすぎることに問題があるように思います。
お客さんと打ち合わせをする際に、実装を理解する人間が1人いるだけでかなり違うとおもうのですが。。。
けれどもその人がそういった場でうまく説明して説得できる人でないと意味はないと思いますけどね。

「やろうと思えば可能なんですが、正直大変です。。。それがないと本当に効率下がりますか?今回のシステムはそこが肝ですか?それ以外に力を注ぐところはないですか?」みたいな切り込み方をいつもしてますなぁ。だめなのかなぁ。。。

# re: AutoTab機能の実装問題 2007/03/17 23:55 Ognac

相手が、長年の汎用機システム経験者で、汎用機のバリバリのSE/PMだった場合はもっと困ります。
力関係(政治力)の勝負になり勝ちです。どうもPC系が弱い立場の時が多いかな。

# re: AutoTab機能の実装問題 2007/11/19 9:54 よしー

以下みたいにすれば比較的簡単に実装できますよ。
ご存知かもしれませんが・・・^^;

Load時に走らないように、準備OKフラグを使って
イベントの開始を制限しています。

以下は私が実際に使っているものです。

Private Sub TextChangedTab(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Kyu_Y.TextChanged _
, Kyu_M.TextChanged, Kyu_D.TextChanged, Sei_Y.TextChanged, Sei_M.TextChanged, Sei_D.TextChanged, Ren_D.TextChanged _
, ST_J.TextChanged, ST_J.TextChanged, ST_F.TextChanged, ET_J.TextChanged, ET_F.TextChanged

If 準備OK = False Then
Exit Sub
End If

If sender.Text.ToString.Length >= sender.MaxLength Then
Me.SelectNextControl(sender, True, True, True, True)
End If

End Sub

# re: AutoTab機能の実装問題 2007/11/19 20:53 Ognac

ありがとうごさいます。簡単ですね。
作り込みが必要いうのは避けられないのですね。

# SajIkmvdhADArTpy 2021/07/03 2:57 https://amzn.to/365xyVY

Wow, great blog article.Thanks Again. Want more.

タイトル
名前
Url
コメント