- PR -

常にアクティブな状態のウィンドウni

1
投稿者投稿内容
Hidering
常連さん
会議室デビュー日: 2007/05/22
投稿数: 33
投稿日時: 2007-12-12 14:31
お世話になります。

常にアクティブな状態のウィンドウを作成したいのですが、

フォームにタイマーを貼り付け

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Activate()
End Sub

とし、デバッグモードで実行すると他のウィンドウをクリックしても作成した
フォームが前面に出てきてアクティブになりますが、Visual Studioを終了し、
exeで実行した場合、意図した動作にならず、タスクバーに表示されたフォームの
色が変化するだけです。
デバッグモード時と同じ動作にする方法はありますでしょうか?

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-12 14:44
引用:

Hideringさんの書き込み (2007-12-12 14:31) より:

exeで実行した場合、意図した動作にならず、タスクバーに表示されたフォームの色が変化するだけです。


"色が変化する" とはタスク バーが 3 回点滅することを指しているでしょうか? タスク バー 3 回点滅は Activate が別のウィンドウと衝突した場合に起こります。 また最小化状態である場合にも起きます。 これは 「アクティブ == 前面に表示される」 ではないからです。

というより、常にアクティブな Form というのが正攻法では無理です。 アクティブである必要性もわかりません。 最前面ならまだ事情はわかりますが、アクティブにするかどうかはユーザーが勝手に決めることではないでしょうか?

それともシステム モーダルなダイアログを作りたいということでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Hidering
常連さん
会議室デビュー日: 2007/05/22
投稿数: 33
投稿日時: 2007-12-12 15:20
じゃんぬねっとさん早速のご回答ありがとうございます。

現在マウスがクリックされた座標の色抽出プログラムを作成しております。
マウスのクリックは
Me.Capture = True
として、フォームのMouseDownイベントを利用して検出しています。

一度クリックしてしまうと検出ができなくなりますが、フォームをクリックすると
再度検出が可能になるためMe.Activateをタイマー内で呼ぶことで解決しました。

ただし、Visual Studioを終了してexeを直接起動すると
クリックは一度しか検出されませんでした。
常にクリックを検出する方法を模索していますが、原因は
Me.Activateがデバッグモードの場合と動作が違うことにあると考えたので
先ほどのように質問させていただきました。

因みにタイマー処理は拡大鏡の表示ロジックで使用しています。

引用:
"色が変化する" とはタスク バーが 3 回点滅することを指しているでしょうか?


点滅はしません。色が変化するだけです。というか1回点滅するということでしょうか。。。


引用:
「アクティブ == 前面に表示される」 ではないからです


Me.Activate()の代わりに
SetForegroundWindowも使用してみましたが、
双方ともexe時にはフォームは前面には出ませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)