• 締切済み

コントロール上でのポップアップメニューによる貼り付けを拒否したいのですが・・・・

こんにちわ。 現在VB6でソフト開発を行っており、テキストボックスへの入力制限について手動で制御しようとしています。 例えば、あるコントロールでは「半角数字の1~5のみを入力できるように」というような具合にです。 そのために、コントロールのKeyPressイベントで下記のようにコーディングしており、キーボードによる入力制限はこれで上手く制御できていますが、 他のアプリケーションでクリップボードにコピーした文字列を、このコントロール上でポップアップメニュー(マウスの右ボタンクリック)によって貼り付けをすると英数字でも貼り付けできてしまうのです。(Ctrl+Vは防げています) Private Sub txtBin_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case vbKey1 To vbKey5 '数字のみ入力可 Case vbKeyBack Case vbKeyReturn Or vbKeyTab cmdSearch.SetFocus 'フォーカスの移動 Case Else KeyAscii = 0 End Select End Sub これを回避する方法として考え付く方法またはそれ以外の方法で良い案が あればどなたかご教授ください。 (1)アプリケーション全体においてクリップボード自体を使用不可にする方法 (2)独自に作ったポップアップメニューをアプリケーション全体に一括で設定する方法。(各コントロールのMouseDownで設定する方法は知っていますが、ひとつひとつ設定するにはあまりにコントロールの数が多いので。。。) (3)文化オリエント社のInputManでマスクをする方法。 あとは思いつきませんが、上記の3つでもだめだよとか、そんなご意見があればお願いします。

みんなの回答

  • haporun
  • ベストアンサー率40% (230/562)
回答No.3

VBの範囲から出てしまうのですが、ホットキーを使って、キーを制御したらどうでしょうか。 確かAPIでできたと思います。 修正できないほどの数のコントロールを1つのフォームにおくのはどうかと思いますが。 リストで代用したほうがいいですね。 バージョンアップするときは、その辺を考慮に入れることをお勧めします。

orange_pie
質問者

お礼

なるほど。ホットキーという手もありますねぇ。。。 勉強がてらやってみます。 ありがとうございました。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

○Changeイベントで、文字の変化を見張り、新しい文章の中に不正な文字があったら抜く。 ただし、1文字打つごとに監視していたのではたまらないので、文字が複数増えたときだけを監視する。 ○タイマーコントロールで、キーを打ち終わった1秒後とかに、上記の動作をする。 ○右クリック禁止。 などなど。 独自メニューにしたければ、すべてのコントロールを配列にすれば、1つずつのコントロールではなく、種類ごとのコントロールにMouseDownイベントを記述すればよくなります。 私は、2番目に挙げた方法が、かなり気に入っています。 打ち終わった数秒後に自動保存とか。 VBで文字列の制御をするのは、ちょっと難しいうえに、動作も遅くなるので注意してください。

orange_pie
質問者

お礼

みなさん、苦労しているんですねぇ。やはり。。。。 貴重なご意見ありがとうございました。 コントロール数が多くて、既に出来上がっているシステムなので、 大幅変更(各コントロールごとに手を加えるような)をしなくて済む ような裏技をお持ちの方のさらなるご意見を引き続きお待ちしています。。。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

changeイベントでtextプロパティに1~5以外の文字があればを削る

関連するQ&A