[リストへもどる]
一括表示

投稿時間:2004/03/05(Fri) 17:11
投稿者名:しゅう
URL :
タイトル:
MSHFlexGridのdblclickイベントについて
vb初心者です。
MSHFlexGridをダブルクリックし、その内容を別のフォームのTextに表示させたいのですが、
一瞬表示され、消えてしまいます。ちなみに、Clickイベントでは、きちんと表示されます。
また、別にコマンドボタンを配置し、コマンドボタンのクリックイベントでMSHFlexGridの
dblclickイベントにとばすときちんと表示されます。加えて、3行目程より下の行では、
きちんと表示されます。以下がモジュールです。本サイトを一通り拝見したのですが、見落
としたのかもしれませんが、分かりませんでした。初歩的なことなのかもしれませんが、
どなたか教えていただければと思います。

Private Sub MSHFlexGrid1_dblClick()
With MSHFlexGrid1
Form2.MSHFlexGrid2.txt相手.Text = .TextMatrix(.Row, 1)
Form2.MSHFlexGrid2.Show vbModal
End With
End Sub

投稿時間:2004/03/05(Fri) 17:58
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: MSHFlexGridのdblclickイベントについて
コードは Form2.MSHFlexGrid2.txt相手.Text 等では無くて
下記では無いんですか?

また変数名やコントロールに全角は避けた方が良いのでは。
txt相手.Text  <==


Private Sub MSHFlexGrid1_dblClick()
   With MSHFlexGrid1
       Form2.txt相手.Text = .TextMatrix(.Row, 1)
       Form2.Show vbModal
    End With
End Sub

投稿時間:2004/03/05(Fri) 18:15
投稿者名:しゅう
URL :
タイトル:
Re^2: MSHFlexGridのdblclickイベントについて
> コードは Form2.MSHFlexGrid2.txt相手.Text 等では無くて
> 下記では無いんですか?
>
> また変数名やコントロールに全角は避けた方が良いのでは。
> txt相手.Text  <==
>
>
>  Private Sub MSHFlexGrid1_dblClick()
>    With MSHFlexGrid1
>        Form2.txt相手.Text = .TextMatrix(.Row, 1)
>        Form2.Show vbModal
>     End With
>  End Sub

スミマセン!分かりやすく、コードの一部を修正して掲載しようとしたときに、
間違って入力してしまいました。
nobuさんの訂正していただいたコードの通りです。よろしくお願いします。


尚、変数やコントロール名については、全角は好ましくないのですね。日本人なもんですから、ついつい
日本語で変数名等を使ってしまってます。今回全角で大量に使ってしまっているので、今後は半角入力
してみたいと思います。

投稿時間:2004/03/05(Fri) 19:08
投稿者名:nobu
Eメール:
URL :
タイトル:
Re^3: MSHFlexGridのdblclickイベントについて
> スミマセン!分かりやすく、コードの一部を修正して掲載しようとしたときに、
> 間違って入力してしまいました。
> nobuさんの訂正していただいたコードの通りです。よろしくお願いします。

私の書いたコードでも不具合がありますか?
こちらでは一応はテストしてから提示をしたのですが。

問題点を再度、書いて下さい。
そして、そちらでの実際のコードをコピー・ペーストで
提示した上で、何がどうなるので、どの様に不具合かを再度。


投稿時間:2004/03/05(Fri) 19:17
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
MSHFlexGridのdblclickイベント を感知する
うまく表示されない、実際のコードをコピーペで投稿しないと解決を
遅らせるだけですよ。
nobu さんのコードで問題ないはずですよ。
何か余計な処理していませんか?
MSFlexGrid1_Click イベントでなにか処理していませんか?
Click イベント が発生してからダブルクリックイベントが発生することに
注意して下さい。

下記の部分を追加して見て下さい。

Option Explicit
Private Declare Function GetDoubleClickTime Lib "user32" () As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Sub MSHFlexGrid1_Click()
    'ダブルクリックを感知する
    Dim st As Long
    'マウスのダブルクリックの間隔を考慮(0.18〜0.9)
    st = timeGetTime + GetDoubleClickTime
    'APIを使用しないなら0.18〜0.9秒の範囲で待機して下さい。
    Do While timeGetTime < st
        'timeGetTimeがリセットされた場合
        If st - timeGetTime > 2000 Then st = 0
        DoEvents
    Loop


    '以下に MSHFlexGrid1_Click イベントの処理



End Sub

投稿時間:2004/03/05(Fri) 22:34
投稿者名:しゅう
URL :
タイトル:
Re: MSHFlexGridのdblclickイベント を感知する
nobuさん、花ちゃんありがとうございました。

> うまく表示されない、実際のコードをコピーペで投稿しないと解決を
> 遅らせるだけですよ。
> nobu さんのコードで問題ないはずですよ。
> 何か余計な処理していませんか?
ありがとうございます。今後は、そのようにします。アドバイスありがとうございました。
ちなみに、実際のコードは、

Private Sub fg伝票_dblClick()
With fg伝票
If fg伝票.Rows = 1 Then
a = MsgBox("編集できるデータがありません", , "データなし")
Exit Sub
End If
If .TextMatrix(.Row, 1) = 1 Then
Form伝票.opt支出.Value = True
Form伝票.txt金額.Text = Format$(.TextMatrix(.Row, 5), "#############")
Form伝票.cmb科目.Text = .TextMatrix(.Row, 2)
Form伝票.cmb口座.Text = .TextMatrix(.Row, 3)
Form伝票.txt相手.Text = .TextMatrix(.Row, 6)
Form伝票.txt内容.Text = .TextMatrix(.Row, 7)
End If

If .TextMatrix(.Row, 1) = 2 Then
Form伝票.opt収入.Value = True
Form伝票.txt金額.Text = Format$(.TextMatrix(.Row, 4), "#############")
Form伝票.cmb科目.Text = .TextMatrix(.Row, 2)
Form伝票.cmb口座.Text = .TextMatrix(.Row, 3)
Form伝票.txt相手.Text = .TextMatrix(.Row, 6)
Form伝票.txt内容.Text = .TextMatrix(.Row, 7)
End If

If .TextMatrix(.Row, 1) = 3 Then
Form伝票.opt振替.Value = True
Form伝票.txt金額.Text = Format$(.TextMatrix(.Row, 4), "#############")
Form伝票.cmb科目.Text = .TextMatrix(.Row, 2)
Form伝票.cmb口座.Text = .TextMatrix(.Row, 3)
Form伝票.txt相手.Text = .TextMatrix(.Row, 6)
Form伝票.txt内容.Text = .TextMatrix(.Row, 7)
End If

Form伝票.Show vbModal
End With
End Sub
・・・このようにしてました。
この際、txt相手にだけ、表示がされませんでした。前にも書きましたが、clickイベントや、コマンド
ボタンclickでは、表示されました。


> MSFlexGrid1_Click イベントでなにか処理していませんか?
> Click イベント が発生してからダブルクリックイベントが発生することに
> 注意して下さい。
>
> 下記の部分を追加して見て下さい。
>
> Option Explicit
> Private Declare Function GetDoubleClickTime Lib "user32" () As Long
> Private Declare Function timeGetTime Lib "winmm.dll" () As Long
> Private Sub MSHFlexGrid1_Click()
>     'ダブルクリックを感知する
>     Dim st As Long
>     'マウスのダブルクリックの間隔を考慮(0.18〜0.9)
>     st = timeGetTime + GetDoubleClickTime
>     'APIを使用しないなら0.18〜0.9秒の範囲で待機して下さい。
>     Do While timeGetTime < st
>         'timeGetTimeがリセットされた場合
>         If st - timeGetTime > 2000 Then st = 0
>         DoEvents
>     Loop
>
>
>     '以下に MSHFlexGrid1_Click イベントの処理
>
>
>
> End Sub

上記コードでPrivate Sub MSHFlexGrid1_Click()をdblClickにして加えたら、
うまく処理できました。

初心者だからこそ、質問の仕方には気をつけないとですよね。もっと勉強して
精進しますので、今後ともよろしくお願いします。