こんにちわ。
現在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つでもだめだよとか、そんなご意見があればお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

○Changeイベントで、文字の変化を見張り、新しい文章の中に不正な文字があったら抜く。


ただし、1文字打つごとに監視していたのではたまらないので、文字が複数増えたときだけを監視する。

○タイマーコントロールで、キーを打ち終わった1秒後とかに、上記の動作をする。

○右クリック禁止。

などなど。
独自メニューにしたければ、すべてのコントロールを配列にすれば、1つずつのコントロールではなく、種類ごとのコントロールにMouseDownイベントを記述すればよくなります。

私は、2番目に挙げた方法が、かなり気に入っています。
打ち終わった数秒後に自動保存とか。
VBで文字列の制御をするのは、ちょっと難しいうえに、動作も遅くなるので注意してください。
    • good
    • 0
この回答へのお礼

みなさん、苦労しているんですねぇ。やはり。。。。
貴重なご意見ありがとうございました。

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

お礼日時:2001/05/10 15:07

VBの範囲から出てしまうのですが、ホットキーを使って、キーを制御したらどうでしょうか。


確かAPIでできたと思います。

修正できないほどの数のコントロールを1つのフォームにおくのはどうかと思いますが。
リストで代用したほうがいいですね。
バージョンアップするときは、その辺を考慮に入れることをお勧めします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/05/11 13:57

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報