この記事で扱っていること
- 表のセル入力時にキーボード入力でセルを移動する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWの制御器/表示器の種類の一つに表があります。
その名通り、縦、横のセルに値を入力するあるいは出力させるために使用します。
出力させるのはともかくとして、少し面倒なのが入力です。はじめあるセルをクリックして入力後、Enterを押すと下の行に移動するのですが、隣の列に移動したりあるいは上の行に移動したりといった操作はなく、マウスで選択するしかありません。
マウスで移動くらいで文句言っていても仕方ないと思いつつ、いちいちマウス触ってキーボード触ってという動作も面倒なので、キーボード操作で下(次の行)以外の方向にセル移動できるような設定を考えてみました。
※以下で示している内容はプログラム的にセル移動を行う方法なので実行時以外には動作しません。
どんな結果になるか
プログラムとしてはとりあえず表制御器とそして停止ボタンを用意しています。
イベントストラクチャを使用するのでそのイベントを停止させるために停止ボタンを置いている、という具合です。
プログラムを実行して、表のセルのどこかをクリックします。あとはShiftキーあるいはCtrlキーを押したときの組み合わせで下方向以外のセルへ移動するようにしています(そのため文字入力にShiftキー入力を伴うような場合にはこのプログラムそのままでは使用できません)
プログラムの構造
イベントストラクチャを使用しており、キーダウンイベントで処理を行っています。
ShiftあるいはCtrlキーが押されたかどうかはこのイベント内で捕捉できるので、あとはその結果に応じてセルの位置を変えます。
セルの位置を変えるのには表制御器のプロパティノードで編集位置というプロパティを用いています。
最初の表選択すらマウスを使わない
もしこの表入力をプログラム開始時一番最初に行わせるあるいは特定の動作の後に行わせるようなプログラムとする場合、最初の表選択の入力すらマウスを使用せずに行わせることができます。
簡単に、表制御器に対するキーフォーカスプロパティをTRUEにするだけで実現できます。
キーダウンイベントによるフロントパネルロックを防ぐ
恐らく多くの場合表入力した後にも何かしらキーボード操作を求められることがあると思います。
つまりこのキーダウンイベントによる表操作以外にもキーダウンが起こる可能性は大いにあるということを考えたとき、うまくプログラム全体を組んでいないとフロントパネルのロックで詰んでしまうことがあります。
これを防ぐにはダイナミックイベントにして、表の入力のときのみダイナミックイベント登録したキーダウンイベントの検出を行わせ、表入力が終わったらそのイベントは破棄させてしまうことで回避します。
ダイナミックイベントについてはこちらの記事でも触れました。
以上、参考にしてもらえたら嬉しいです。
ここまで読んでいただきありがとうございました。
コメント