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。当然,这也会删除您的托盘图标。

另一种可能性是在 _Shown 事件中调用 Me.Visible。这可能会导致屏幕闪烁。如果是这样,也许您可​​以在 _Load 中将表单放置在屏幕之外。

于 2013-04-09T21:35:59.687 回答