アプリ版:「スタンプのみでお礼する」機能のリリースについて

ダブルクリックしたら全体を選択する方法をgooで調べていたら、
http://oshiete.goo.ne.jp/qa/4899232.html
に辿りつきました。

Private Sub txt00_DblClick(Cancel As Integer)
  Me.txt00.SelStart = 0
  Me.txt00.SelLength = Len(Me.txt00.Text)
  Cancel = True
End Sub

で、やりたいことが行えたのですが、一つ疑問があります。
Cancel = True
はどういう意味なのでしょうか?

試しに、Cancel = Trueの部分をコメントアウトしてみたら、
テキストボックスが選択状態になりませんでした。

ということは、「Cancel = True」は、「実行!」みたいな意味なのでしょうか?
ご回答よろしくお願いします。

A 回答 (3件)

#1です。

すみません、どうせ同じだろうとExcelのVBAのヘルプで調べていました。Access2010のヘルプには、

>Cancel 必須 整数型 (Integer) DblClick イベントを発生させるかどうかを設定します。引数 Cancel を True (-1) に設定すると、DblClick イベントが取り消されます。

とあり、Excel VBAの記述と異なっておりました。
なお、DblClickで検索してみて下さい。候補のなかから、TextBox.DblClick イベントの所をご覧下さい。(但し、どのコントロールを選んでみても同じ記述かも)
既成の帳票フォームに置いた非連結のテキストボックスで試してみましたが、Excelのテキストボックスと若干挙動が違いますね。遅い2010のせいか、Cancel=Trueを入れないと、一瞬全選択されたものが、元に戻るのが見える気がします。
試したコードは下記の通りです。テキストボックスはつけてあった名前そのままです。
なおCancel = True は、どの位置に書いても効果は同じ様です。ご参考まで。

Private Sub タイトルtextbox_DblClick(Cancel As Integer)
Cancel = True
Me.タイトルtextbox.SelStart = 0
Me.タイトルtextbox.SelLength = Len(Me.タイトルtextbox.Text)
' Cancel = True
End Sub
    • good
    • 1

テキストボックス「txt00」があるとします。


VBAで以下を記述します。

Private Sub txt00_DblClick(Cancel As Integer)
  Cancel = MsgBox("続行?", vbYesNo) <> vbYes
End Sub

「はい」をクリックすると Cancel = False を
「いいえ」をクリックすると Cancel = True を設定して戻るだけです。

テキストボックスに「ABCD EFG.HIJ」と入力し、各文字の上でダブルクリックしてみます。

「はい」とすると、クリックした部分が反転表示されると思います。
「いいえ」なら反転する部分は、ないと思います。

Accessさんが反転処理するのは Cancel = False で戻った後だと推測できます。
ヘルプにもそれらしいことが書いてますね。
元々は、Cancel = False となっているようです。
今回、自分で反転範囲を指定したいので、(Accessさんに処理されては困るので)
Cancel = True として戻します。

以下の記述に変更して、同じように確認してみてください。

Private Sub txt00_DblClick(Cancel As Integer)
  Me.txt00.SelStart = 0
  Me.txt00.SelLength = Len(Me.txt00.Text)
  Cancel = MsgBox("続行?", vbYesNo) <> vbYes
End Sub

「いいえ」なら全選択(全反転)
「はい」ならAccessさんが処理した反転になると思います。

なので
> 「Cancel = True」は、「実行!」みたいな意味なのでしょうか?
ではなく、「Accessさん、処理するな」とでも言った方が良いのでしょうか。
Accessさんの後の処理は Cancel しますよ( True )

なお、Private Sub txt00_DblClick(Cancel As Integer) の引数 Cancel に
ByVal 記述がないのは、
設定した値をAccessさんに見てもらいためだと思います。


余談)

※ テキストボックスの DblClick を、反転させたい処理ではなく、
・フォームを起動する等のためにイベントを使用したい場合、
Cancel = True は記述しておいた方が良いみたいです。
Accessのバージョンによっては、起動したフォームが裏に隠れるとかあるようです。
Cancel = True を指定することで回避できたという事もあるようです。
Accessさんの反転する時の処理が異なるのでしょうか??


私が理解していた範囲のものなので、自己責任にて検証/解釈してください。
    • good
    • 0
この回答へのお礼

Private Sub txt00_DblClick(Cancel As Integer)
  Cancel = MsgBox("続行?", vbYesNo) <> vbYes
End Sub
---------------------------------------------------------
を実行して「はい」(Cancel = False)を押下みたところ
おっしゃる通り、選択部分が反転表示されました。

>今回、自分で反転範囲を指定したいので、
Accessさんに処理されては困るので
Cancel = True として戻します。

なるほど。なんとなくわかりました。
Cancel = True は
何かと役立ちそうですね。ありがとうございました。

お礼日時:2012/04/06 19:59

以前からちょっと気になっていた表現だったので調べてみました(といってもVBAのヘルプですが)



>Cancel 必ず指定します。イベントのステータスを指定します。偽 (False) を指定すると、コントロールがイベントを処理します (既定値)。真 (True) を指定すると、アプリケーションがイベントを処理します。

ここで、アプリケーションというのはVBAのコードで制御しようとする事を言うのでしょうね。VBAのイベントコードを書かなくてもコントロールはWindowsのイベント処理をしている訳で、Cancel=Trueを指定すると、それをキャンセルするという事でしょうか。

当方の試験では、下記コードで何度かWクリックしていると、何かのタイミングで、テキストの全選択が働く事があります。この記述がなければその様な事は起こりません。したがって、VBAコードによる全選択を、コントロール本来のイベント処理が打ち消してしまうので、Cancel=Trueを指定して、それを防いでいると考えれば良いかも...

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1.Text)
End Sub
    • good
    • 0
この回答へのお礼

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1.Text)
End Sub
に変えて検証してみましたが
「イベント プロパティに指定した式 ダブルクリック時
でエラーが発生しました
ユーザ定義型は定義されていません」
となってしまいます。

ちなみに私もVBAのヘルプで調べたいのですが
どうやってしらべればいいでしょうか?
VBE画面でF1を押して「Cancel」と入れて押下すると
67件ヒットしてしまいました。

でもmitarashi様が提示していただいたヘルプの内容によると
False→コントロールがイベントを処理します (既定値)。
True→アプリケーションがイベントを処理します。
との事ですね。

ありがとうございました。大変参考になりました。

お礼日時:2012/04/06 19:59

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A