01-27-2014 04:41 AM
文字列タイプの制御器への入力を制限する実装しています。
(数字、アルファベット、ハイフンのみ入力できる)
単発でのキー入力の制限は、イベントストラクチャのキー入力?、キー繰り返し?イベントで実現できたのですが、
貼り付け操作(Ctrl+V、右クリックメニュー)を制限する方法がわかりません。
貼り付け操作もイベントで取得できるのでしょうか?
貼り付けの制限の仕様は、以下のように考えています。
貼り付けの制限:
貼り付けされた文字列のうち、有効の物のみ受けつけるようにする。
それができない場合は、貼り付け操作自体を無効にする。
ご教授のほど、よろしくお願いいたします。
解決済! 解決策の投稿を見る。
01-28-2014 01:40 AM
こんにちは。
有効な物のみ受け付けることに関して、直接はできないので、
貼り付けられた後に値を編集する後処理になると思います。
貼り付け操作の制限に関しては下記の様な方法があります。
Ctrl+V に関してはイベントストラクチャのキー入力で、Ctrl とVが同時に押されたときだけ
イベントをフィルタする。
そして右クリックメニューに関しては、上記のイベントストラクチャを使用した方法で制限できますし、
制御器を右クリックで上級>>ランタイムショートカットメニュー>>無効でも制限できます。
01-28-2014 03:42 AM
ご回答、ありがとうございます。
教えていただいた方法で右クリックメニューの方は制限できたのですが、
Ctrl+Vのようにキーが同時押しされたかの取得方法がわかりません。
実際にCtrl+Vを押したときのイベントデータフィールドは、以下のようになっています。
Vkey:Ctrl 文字:0 プラットフォーム修正子(Ctrl):True
これはCtrlキーのみを押したときと同じです。
Vkey:ASCⅡ、文字:118(V)、プラットフォーム修正子(Ctrl):Trueのようになっていればわかるのですが…
また、Ctrlキー入力はキー入力イベントで破棄しているはずですが、実際には貼り付け処理が行われます。
01-28-2014 04:44 AM
キーダウンのイベント検知の範囲を「このVI」で設定してた時は、
問題なかったのですが、範囲を「文字列制御器」に設定すると上手く行きませんね。
そこでLabVIEWヘルプでキーダウンイベントの記事を見たところ、
LabVIEWで使用されているショートカット(Ctrl+V, Ctrl+C)などが押されたときは
イベントとして認識されないらしいです。
なので範囲がVI 全体に広がってしまいますが、「このVI」にしてはいかがでしょうか。
01-28-2014 05:37 AM
ちょっとサンプルプログラムを作成してみました。
このような感じでいかがでしょうか?
入力文字列のASCIIコードを確認し、この例では数値のみを許可するようにしてます。
イベントストラクチャはCtrl+Vのペーストには文字列制御器の「値変更」、右クリックからのペーストに対しては「ショートカットメニュー選択(アプリ)」で対応しています。
01-28-2014 07:02 AM
後処理がこんな簡単にできるとは意外でした。こっちの方が使い勝手がいいですね。
01-29-2014 06:42 PM