繁体   English   中英

为什么我的应用程序两次加载文件?

[英]Why is my application loading my files twice?

在我的应用程序中,我有自己的自定义文件类型。 我将其设置为检测应用程序是从在资源管理器中打开的文件启动还是从程序集打开。 一切工作都很好,除了从应用程序外部打开我的一个文件时,它会按应有的方式打开应用程序并将文件加载到我的应用程序的文本编辑器中。 唯一的问题是,它将文件两次加载到文本编辑器中。 我不知道为什么。 谁能给我一些启示?

在作为表单加载的替代中调用该代码。 这样做的原因是因为我的启动表单在启动时不可见,除了它显示通知图标,以便可以完成操作或显示该表单。 使用此代码的唯一其他地方是在上下文菜单中单击菜单项时,尽管这会打开openfile对话框,然后在对话框中打开文件。

编辑:在子代码中添加了其余的代码。

我找到了解决问题的方法,并通过修复程序回答了自己的问题。 我要感谢任何帮助过的人。 另外,我要感谢Hans Passant,因为他是此处显示的替代代码的作者。 这样可以使启动窗体保持不可见,同时仍显示通知图标。

     Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)

    If Not Me.IsHandleCreated Then
        Me.CreateHandle()
        value = False
    End If
    MyBase.SetVisibleCore(value)
    If (Environment.GetCommandLineArgs.Length > 1) Then

        Dim s As String = Environment.GetCommandLineArgs(1)

        Using sr As New StreamReader(s)
            While Not sr.EndOfStream
                Dim item As New ListViewItem
                item.SubItems.Add(sr.ReadLine())
                ListView3.Items.Add(item)
            End While
        End Using
        For I = 0 To ListView3.Items.Count - 1
            ListView3.Items(I).Text = CStr(I)
        Next
    End If

答案可以在下面看到。

它不能解决您的问题,但是可以进行一些重构,并且可以避免第二个循环:

With ListView3.Items.Add(ListView3.Items.Count)
  .Subitems.Add(sr.ReadLine())
End With

我想出了解决这个问题的方法。 我发现确实是两次触发代码。 最有可能与覆盖有关。 仍然不是100%确定。 我创建了一个布尔值只允许代码触发一次。 现在效果很好。 谢谢所有尝试提供帮助的人。

     Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
    Static blnExecuted As Boolean
    If Not Me.IsHandleCreated Then
        Me.CreateHandle()
        value = False
    End If
    MyBase.SetVisibleCore(value)
    If (Environment.GetCommandLineArgs.Length > 1) Then

        Dim s As String = Environment.GetCommandLineArgs(1)
        If blnExecuted = False Then
            blnExecuted = True
            Using sr As New StreamReader(s)
                While Not sr.EndOfStream
                    Dim item As New ListViewItem
                    item.SubItems.Add(sr.ReadLine())
                    ListView3.Items.Add(item)
                End While
            End Using
            For I = 0 To ListView3.Items.Count - 1
                ListView3.Items(I).Text = CStr(I)
            Next
        End If

    Else
        openscriptfunc()
    End If

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM