• 締切済み

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

こんにちわ。 現在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

  • カレンダー機能について

    VBでカレンダーのプログラムを作成していて現在「年」と「月」がコンボボックスになっていてプルダウンより選択することでClickイベントが走りそれより取得した値を基にカレンダーを表示させているのですが追加でコンボボックスに直接キーボードより入力しEnterキーを押した時に入力した値を基にカレンダーを表示させたいのですが上手くいきません。以下の方法ではだめなのでしょうか?よろしくお願いします。 (一部抜粋) Private Sub cboList_month_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then Call cboList_month_Click() Exit Sub End If End Sub Private Sub cboList_month_Click() Select Case cboList_month.ListIndex Case 0 mintCur_month = 1 … Case 11 mintCur_month = 12 End Select Call calender_hyouzi 'カレンダーを表示させる関数 Exit Sub End Sub        

  • 16進数

    Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("a") And KeyAscii <= Asc("f") Then Else KeyAscii = 0 Beep End If End Sub 上のソースだと数字が入りません。 どうすれば入力できますか。 ※zと入れると強制終了になってしまうので、上のソースを入れたんですが・・・ ※タグが崩れて見にくくてすいません

  • Back Spaceを入力可にするには?

    金額を入力して計算するルーチンを作成しています。 以下のコードで、数字以外は入力不可にしたのですが・・・・ 数値を訂正するためのBack Spaceも入力できなくて困っています。 0~9までしか受け付けないコードなのはわかっていますが、それに加えてBack Spaceも受け付けられるようにするにはどんなコードを書けばよいでしょうか。 Private Sub genkin_KeyPress(KeyAscii As Integer) If KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then Exit Sub Else KeyAscii = 0 Beep End If End Sub

  • 押されたキーにてポップアップメニューを切り替える

    OS:XP SP2 アプリ:Excel 2002 ワークシート上で右クリックにてポップアップメニューが表示されますが、Ctrl+右クリック、Shirf+右クリック、Alt+右クリックにて、独自のポップアップメニューを表示させようてしています。 プロジェクトにクラスモジュールを追加し下記の様に宣言しています。 Private WithEvents App As Application Private Sub Class_Initialize() Set App = Application End Sub 右クリックイベント内で現在押されているキーを判断することはできないでしょうか? Private Sub App_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) ここで押されたキーにて表示するメニューを切り替える End Sub 独自のポップアップメニューの追加/表示はできています。 ご教授のほど宜しくお願いします。

  • vb作成したらでbeep音が鳴ります。経験あるかたお願いします。

    KeyPressイベントを追加して、データ入力後にエンターキーを押すとbeep音が鳴ります。ほかではescキーも鳴りますが、その他は鳴らないで動くようです。 単純に新規作成から、Form1へtestテキストコントロールを追加して、以下の記述をしただけなのですが、どうしてなるのか原因がわかりません。 Private Sub test_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then test.text="ok" End If End Sub ←この次でbeep音! 環境はvb6.0、windows2000。 仕様なのでしょうか? ハード側の問題なのでしょうか? 経験あるかた宜しくお願い致します。

  • VBA エンターキーでイベントに入りたい。

    テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。 これと全く同じコーディングでVB6は正しく動きます。(ただし、Pvate Sub text1_KeyPress(KeyAscii As Integer)に変更してます。) <コーディング> Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Msgbox "通過" If KeyAscii = vbKeyReturn Then KeyAscii = 0 End If End Sub これが出来ると、そのつどキーボードから手を離さずに済むので作業効率がグンとあがります。どうかよろしくご教示ください。Excel2003SP3

  • キー入力を制限しつつ、Ctrl+CやCtrl+Vを活かすには?

    数字とバックスペース以外入力できないテキストボックスTextBoxAを作りました。 Private Sub TextBoxA_KeyPress(KeyAscii As Integer) If KeyAscii <> vbKeyBack Then If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End If End Sub と記述しましたが、Ctrl+CやCtrl+Vが効きません。 右クリックでコピー、ペーストはできるのですが、コントロールキー によるコピペを可能にするにはどうしたらいいでしょうか? どなたかよろしくお願いします。

  • 大文字入力を標準モジュールにしたい!

    大文字入力を標準モジュールにしたい! 現在、各txtBoxのキー入力時に下記コードで大文字入力をしていますが、 箇所が多いのでCall呼び出しでできないものかとやってみましたがうまく行きません・・・ Select Case KeyAscii Case 97 To 122 KeyAscii = KeyAscii - 32 Case Else End Select どうかお力添えを宜しくお願いいたします。

  • エクセルVBAでフォームのボタンとコントロールツールボックスのコマンドボタン

    エクセルVBAでフォームのボタンとコントロールツールボックスのコマンドボタンについて教えてください。 実はこれまでフォームしか使ったことがないのですが、フォームのボタンですと、下記のように一つのプロシージャを多数のボタンから呼び出し、呼び出したボタンにより異なった指示が出来ます。 Sub test() x = Application.Caller Select Case x Case "ボタン 1" MsgBox 1 Case "ボタン 2" MsgBox 2 Case "ボタン 3" MsgBox 3 Case "ボタン 4" MsgBox 4 End Select End Sub コントロールツールボックスは Private Sub CommandButton1_Click() MsgBox 1 End Sub Private Sub CommandButton2_Click() MsgBox 2 End Sub のようにコマンドボタンごとにひとつずつ書くしかないのでしょうか?

  • テキストの入力時、カーソルの移動をスムーズにしたい

     VB6で複数入力項目(テキスト/コンボボックス等)がある画面を作っているのですが、文字が最大桁数に達したら、次のコンボボックスへカーソル(=フォーカス)を移動し、次の入力項目へを行いたいのですが、 どうも思った様に、移動しないです。  以下は半角数字項目が最大文字数に達した場合、次のインプットボックスへフォーカスが移動する様に組んでみました。 Private Sub Txt_Input_KeyPress(KeyAscii As Integer) If KeyAscii <> 8 And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0 If Len(Txt_Input.Text) >= (Txt_Input.MaxLength - 1) Then Txt_Input2.SetFocus End If End Sub ところが、バックスペースでも1文字分と捉えてしまう様で、3文字入力の場合等は先頭から入力し直さないと、再入力も儘ならない状態です。 何かバックスペースも自然に効く形で同様の制御は行えないものでしょうか。 (尚、MaxLength - 1の部分は-1しないとフォーカスが動きませんでした。)

このQ&Aのポイント
  • 新PCで購入したpc-ls350rswのバッテリーを充電する方法がわからないです。
  • バッテリーが0%表示で充電できないトラブルが続いています。
  • 購入から1か月以上経っており、何度充電してもうまくいきません。どうしたらよいでしょうか?
回答を見る

専門家に質問してみよう