C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: NotifyIconとMe.Focused


(過去ログ 66 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■38114 / inTopicNo.1)  NotifyIconとMe.Focused
  
□投稿者/ lino. (17回)-(2009/07/07(Tue) 10:18:43)

分類:[.NET 全般] 

いつもお世話になっています。vb2005です。

NotifyIconをクリックすると、Formがアクティブの時はMe.Visible = Falseにして、そうでない時はMe.Visible = Trueのままアクティブにさせるようにしたいのですが、

If Me.Visible = True Then
If Me.Focused Then 'Formがアクティブの時
Me.Visible = False
Else 'アクティブでない時は先にアクティブにすることを優先する
Me.Activate()
End If
End If

とすると「ない時はMe.Visible = Trueのままアクティブにさせる」はちゃんと作動するのですが、「Formがアクティブの時」はクリックしてもMe.Visible = Falseになりません。
どう直せばちゃんと動くのか、考えても分からないので、投稿させていただきました。どうか、お教え願えませんでしょうか。
引用返信 編集キー/
■38116 / inTopicNo.2)  Re[1]: NotifyIconとMe.Focused
□投稿者/ επιστημη (2025回)-(2009/07/07(Tue) 11:03:37)
επιστημη さんの Web サイト
> ...「Formがアクティブの時」はクリックしてもMe.Visible = Falseになりません。

プロパティ:Focused は"フォーカスが当たっているか"を返してくれますが、
"フォーカスが当たっている" = "アクティブである" ではないんじゃないですか?

プロパティ:ActiveFormが"現在アクティブなForm"を返します。
代わりにこれ使えませんか?

引用返信 編集キー/
■38143 / inTopicNo.3)  Re[2]: NotifyIconとMe.Focused
□投稿者/ lino. (18回)-(2009/07/07(Tue) 18:35:37)
No38116 (επιστημη さん) に返信

> プロパティ:ActiveFormが"現在アクティブなForm"を返します。
> 代わりにこれ使えませんか?
>

ありがとうございます。
ええと、使い方まちがってるかもしれませんが、 VB ActiveForm で検索して調べてみて、
If Me.Visible = True Then
If System.Windows.Forms.Form.ActiveForm IsNot Nothing Then
Me.Visible = False
End If
End If

としてみました。
まずToolStripMenuItemを一つ作ってこのコードを試しに入れてみて確認するとちゃんとMe.Visible=Falseになるのですが、肝心のNotifyIcon1に、
If Me.Visible = True Then
If System.Windows.Forms.Form.ActiveForm IsNot Nothing Then
Me.Visible = False
Else 'アクティブでない時は先にアクティブにすることを優先する
Me.Activate()
End If
End If
と入れても
Else 'アクティブでない時は先にアクティブにすることを優先する
Me.Activate()
はちゃんとそうなりますが
If System.Windows.Forms.Form.ActiveForm IsNot Nothing Then
Me.Visible = False
は Me.Visible = Falseにはなりませんでした。
引用返信 編集キー/
■38202 / inTopicNo.4)  Re[3]: NotifyIconとMe.Focused
□投稿者/ lino. (19回)-(2009/07/08(Wed) 17:01:58)
まだ解決はしていませんが、確かに上のコードは使い方が間違っているのでとりあえず修正します。
If System.Windows.Forms.Form.ActiveForm Is Me Then
Me.Visible = False
Else 'アクティブでない時は先にアクティブにすることを優先する
Me.Activate()
End If
ですね。さっきのだと「もしアクティブなフォームがあるのなら」という意味なので。
で、やっぱり
Else 'アクティブでない時は先にアクティブにすることを優先する
Me.Activate()
は動くのですが、それより前は動きません。で、試しに
If System.Windows.Forms.Form.ActiveForm Is Me Then
Me.Visible = False
End If
とすると、なぜかフォームそのもののフォーカスを失ってしまいます。

引用返信 編集キー/
■38224 / inTopicNo.5)  Re[4]: NotifyIconとMe.Focused
□投稿者/ lino. (20回)-(2009/07/09(Thu) 11:59:30)
If Me.Visible = True Then
If System.Windows.Forms.Form.ActiveForm Is Me Then
Me.Visible = False
ElseIf System.Windows.Forms.Form.ActiveForm IsNot Me Then
Me.Activate()
End If
ElseIf Me.Visible = False Then
Me.Visible = True
Me.WindowState = FormWindowState.Normal
Me.Activate()
End If
何かVisibleとSystem.Windows.Forms.Form.ActiveFormは相性悪いみたいですね。やっぱり
If System.Windows.Forms.Form.ActiveForm Is Me Then
Me.Visible = False
だけが動きません。
If Me.Visible = True Then
Me.Visible = False
ElseIf Me.Visible = False Then
Me.Visible = True
Me.WindowState = FormWindowState.Normal
Me.Activate()
End If
はちゃんと動くのですが、これだと「アクティブでない時は先にアクティブにすることを優先する」ことができないですし。
引用返信 編集キー/
■38251 / inTopicNo.6)  Re[5]: NotifyIconとMe.Focused
□投稿者/ lino. (21回)-(2009/07/09(Thu) 17:10:04)
いっそ外に出してみました。
If Me.Visible = True AndAlso System.Windows.Forms.Form.ActiveForm IsNot Me Then
Me.Activate()
'ここで消えてしまいます。
End If
If Me.Visible = True Then
Me.Visible = False
’消えます
ElseIf Me.Visible = False Then
Me.Visible = True
Me.WindowState = FormWindowState.Normal
Me.Activate()
’出てきます
End If


引用返信 編集キー/
■38286 / inTopicNo.7)  Re[6]: NotifyIconとMe.Focused
□投稿者/ lino. (22回)-(2009/07/10(Fri) 15:12:40)
> If Me.Visible = True AndAlso System.Windows.Forms.Form.ActiveForm IsNot Me Then
> Me.Activate()
> 'ここで消えてしまいます。
> End If
> If Me.Visible = True Then
> Me.Visible = False
> ’消えます

どっちも「Me.Visible = Trueなら」だから、まずMe.Activate()を実行してから次のIf Me.Visible = True Then Me.Visible = Falseを実行しているみたいですね。でもIf System.Windows.Forms.Form.ActiveForm IsNot Me ThenだけだとMe.Activate()してくれないので、Me.Visible = Trueはいるみたいですし。

で、もう妥協しました。何にしろIf Me.Visible = True AndAlso System.Windows.Forms.Form.ActiveForm IsNot Me ThenがあるせいでIf Me.Visible = True Then Me.Visible = Falseがなぜか分かりませんが動かないのなら、今までMouseClickのところにこれらを書いていたのですが、そこのIf Me.Visible = True Then Me.Visible = Falseを消して、別の場所に

Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
If Me.Visible = True Then
Me.Visible = False
End If
End Sub

を作りました。ちゃんと動作しました。
そもそも、最初に、つまりIf Me.Focused Thenと書いていた時はちゃんとあのコードは動作したんですよね。で、さてビルドするかと最終チェックしていたらもう動かないことに気付いたんです。あの後追加したコードで、NotifyIconに何か干渉するものが果たしてあったのでしょうか……謎です。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -