午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

タイマーアプリ(タイマーアパカッ)作成その10、お知らせウィンドウがアクティブ状態で表示される不具合を解消?

時間になった時にでてくるお知らせウィンドウがアクティブになってしまうことがある不具合の修正した、はず

 

f:id:gogowaten:20191016160858p:plain

タイマー進行中にメモ帳で何かを書いていて時間が来た時に
 

f:id:gogowaten:20191016160909p:plain

お知らせウィンドウがアクティブ状態で表示されて
今まで使っていたアプリ、上の画像ではメモ帳から
フォーカスが移動してしまう不具合があった
 
 

f:id:gogowaten:20191016160919p:plain

ウィンドウを非アクティブ状態で表示して
他のアプリからフォーカスを奪わないようにした
 
今までもそうしてきたつもりなんだけどアクティブになる時とならない時があって
原因がわからなかった
起動直後は問題なく動いて、他のアプリを使ったりしてウィンドウが下に隠れて
タスクバーのアイコンをクリックして呼び出してタイマーを実行すると
アクティブ状態で表示される、までは突き止めていたので
表示するときや閉じるときに問題があるんだろうなあとは思っていて
なんとなくコードを眺めていて思いついたことを試したら直ったっぽい?
 
    Private Sub お知らせウィンドウ表示(title As String, myTime As String)
        '設定でお知らせウィンドウ表示するにチェックが入っていたら実行
        If My.Settings.NoticeWindow Then
            Dim fm3 As Form3
            fm3 = New Form3
           With fm3
                .Location = l   '表示位置
                .BackColor = col '背景色
                .Opacity = My.Settings.NoticeOpacity '透明度
                .Text = myTime & "経ちました" 'タイトルバー
                .LabelNotice.Text = title
                .TopMost = True '最上面表示
                .ShowDialog(Me) 'ダイアログ表示←今回
                ’.ShowDialog() 'ダイアログ表示←前回
            End With
        End If
    End Sub
 

f:id:gogowaten:20191016160932p:plain

Form3がお知らせウィンドウ
 
非アクティブで表示すること自体は

Public Class Form3

    Protected Overrides ReadOnly Property ShowWithoutActivation() As Boolean
        '非アクティブのままサブ・フォームを表示するには?[2.0のみ、C#VB] - @IT
        'ほとんど理解できていないんだよなあ
        Get
            Return True
        End Get
    End Property

今ではこれを書いた(コピペ)時よりはちょっとわかる(わかってない)
この時はほんとにコピペしただけだった

ダウンロード
ヤフーボックス
 
 
追記2019/10/16
このアプリは今でも毎日使っている
追記ここまで
 
 
前回のタイマーアカパッ、2014/11/01は2ヶ月前

gogowaten.hatenablog.com