1

さて、私はここで少し問題を抱えています。アプリケーションのログイン ウィンドウを作成していますが、アプリケーションの起動時にログイン画面を表示せずに、自動的にログインする (つまり、ユーザーがログインしたときに発生する機能を実行する) ようにしようとしています。すでに保存されている電子メールとパスワードを持っています。アプリの実行中を示す通知システム トレイ アイコンがあり、フォームが表示されていない場合は、バルーン通知がポップアップして、ユーザーがまだ実行中であることを認識し、アイコンをクリックしてログイン画面を開きます。

次のコードを見てください。このIf Notイベントが呼び出され、正しく機能していることはわかっています。これは、フォームを非表示にすることを除いて、ステートメント内のすべてを実行するためです。 非表示にならないのはなぜですか?Me.Hide も試しましたが、同じ問題が発生しました。バルーン通知がポップアップし、テキスト ボックスには以前に保存されたデータが表示されますが、フォームは表示されたままです...

Private Sub RadFrmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    'Checks settings to see if email and password have already been stored and enters them into text fields, proceeds to automatically update access list
    If Not String.IsNullOrEmpty(My.Settings.Email) And Not String.IsNullOrEmpty(My.Settings.Password) Then
        TxtEmail.Text = My.Settings.Email
        TxtPassword.Text = My.Settings.Password

        Me.Visible = False

        'Displays Balloon Tip
        ntfySystemTrayIcon.ShowBalloonTip(800)
    End If

End Sub

追加のメモとして、フォームを非表示にするテスト ボタンを追加しましたが、完全に機能します。

Private Sub BtnHide_Click(sender As Object, e As EventArgs) Handles BtnHide.Click
    'Hides form(for testing notification tray icon and balloon tip
    Me.Visible = False
    ntfySystemTrayIcon.ShowBalloonTip(1000)
End Sub
4

2 に答える 2

2

(まったく役に立たなかったので、私のばかげたデフォルトのデバッグ命令を削除しました)

アップデート

以前にも同様の質問がありました。こちらをご覧ください: C#/.NET - WinForms - Instantiate a Form without show it

簡単な説明: 通常、form1.show のようなものが使用されるため、form_load が終了した後は常に visible = true に変更されます。

指示されたイベント form_shown を使用して、visible=false を追加します。

または別のユーザーが、開始プロパティを最小化に変更し、アクティブ化してタスクバーにプログラムを非表示にすることを推奨しました。これにより、煩わしいちらつきを防ぐことができます。その後、オプションを元に戻すことができると思います。

更新 2 以下はうまくいくようです:

Private _IsVisible As Boolean
Public Property IsVisible() As Boolean
    Get
        Return _IsVisible
    End Get
    Set(ByVal value As Boolean)
        _IsVisible = value
        If _IsVisible Then
            Me.WindowState = FormWindowState.Normal
            Me.ShowInTaskbar = True
            Me.Visible = True
            Me.Activate()
        Else
            Me.WindowState = FormWindowState.Minimized
            Me.ShowInTaskbar = False
            Me.Visible = False
        End If
    End Set
End Property

小さなタスクバーのちらつきをなくしたい場合は、フォーム プロパティ showInTaskbar を変更します。form_load 中に変更すると、タスクバーに短い動きがあるように見えます。

そして、それを完璧にするために、form.Shown に次のコードを追加します。

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    Me.Visible = IsVisible
End Sub

今では使用するのに十分です

IsVisible = False

form_Load で、または表示したい場合

IsVisible = True
于 2013-04-09T21:38:36.943 に答える
0

いくつかのアイデア:

すべてのタスクが _Load イベントで完了した場合は、End を呼び出してみてください。もちろん、トレイアイコンも削除されます。

もう 1 つの可能性は、_Shown イベントで Me.Visible を呼び出すことです。これにより、画面にフラッシュが発生する場合があります。もしそうなら、_Load でフォームを画面外に配置できます。

于 2013-04-09T21:35:59.687 に答える