NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

貼り付けによる文字列入力の制限

解決済み
解決策を見る

文字列タイプの制御器への入力を制限する実装しています。

(数字、アルファベット、ハイフンのみ入力できる)

単発でのキー入力の制限は、イベントストラクチャのキー入力?、キー繰り返し?イベントで実現できたのですが、

貼り付け操作(Ctrl+V、右クリックメニュー)を制限する方法がわかりません。

貼り付け操作もイベントで取得できるのでしょうか?

 

貼り付けの制限の仕様は、以下のように考えています。

貼り付けの制限:

 貼り付けされた文字列のうち、有効の物のみ受けつけるようにする。

 それができない場合は、貼り付け操作自体を無効にする。

 

ご教授のほど、よろしくお願いいたします。

0 件の賞賛
メッセージ1/7
5,847件の閲覧回数

こんにちは。

 

有効な物のみ受け付けることに関して、直接はできないので、

貼り付けられた後に値を編集する後処理になると思います。

 

貼り付け操作の制限に関しては下記の様な方法があります。

 

Ctrl+V に関してはイベントストラクチャのキー入力で、Ctrl とVが同時に押されたときだけ

イベントをフィルタする。

そして右クリックメニューに関しては、上記のイベントストラクチャを使用した方法で制限できますし、

制御器を右クリックで上級>>ランタイムショートカットメニュー>>無効でも制限できます。

0 件の賞賛
メッセージ2/7
5,824件の閲覧回数

doradorachan

 

ご回答、ありがとうございます。

教えていただいた方法で右クリックメニューの方は制限できたのですが、

Ctrl+Vのようにキーが同時押しされたかの取得方法がわかりません。

実際にCtrl+Vを押したときのイベントデータフィールドは、以下のようになっています。

 Vkey:Ctrl 文字:0 プラットフォーム修正子(Ctrl):True

これはCtrlキーのみを押したときと同じです。

 

Vkey:ASCⅡ、文字:118(V)、プラットフォーム修正子(Ctrl):Trueのようになっていればわかるのですが…

また、Ctrlキー入力はキー入力イベントで破棄しているはずですが、実際には貼り付け処理が行われます。

0 件の賞賛
メッセージ3/7
5,818件の閲覧回数

キーダウンのイベント検知の範囲を「このVI」で設定してた時は、

問題なかったのですが、範囲を「文字列制御器」に設定すると上手く行きませんね。

 

そこでLabVIEWヘルプでキーダウンイベントの記事を見たところ、

LabVIEWで使用されているショートカット(Ctrl+V, Ctrl+C)などが押されたときは

イベントとして認識されないらしいです。

なので範囲がVI 全体に広がってしまいますが、「このVI」にしてはいかがでしょうか。

0 件の賞賛
メッセージ4/7
5,812件の閲覧回数
解決策
トピック作成者tyosukeが受理

ちょっとサンプルプログラムを作成してみました。
このような感じでいかがでしょうか?

入力文字列のASCIIコードを確認し、この例では数値のみを許可するようにしてます。

イベントストラクチャはCtrl+Vのペーストには文字列制御器の「値変更」、右クリックからのペーストに対しては「ショートカットメニュー選択(アプリ)」で対応しています。

メッセージ5/7
5,805件の閲覧回数

後処理がこんな簡単にできるとは意外でした。こっちの方が使い勝手がいいですね。

0 件の賞賛
メッセージ6/7
5,802件の閲覧回数

Jester_n

 

提供して頂いたサンプルで貼り付け操作に対する制限も実現できました。

ありがとうございます。

 

doradorachan様もアドバイスしていただき、ありがとうございました。

0 件の賞賛
メッセージ7/7
5,771件の閲覧回数