【问题标题】:Why is my application loading my files twice?为什么我的应用程序加载我的文件两次?
【发布时间】:2012-09-13 20:58:02
【问题描述】:

在我的应用程序中,我有自己的自定义文件类型。我将其设置为检测应用程序是从资源管理器中打开的文件启动的,还是刚刚从程序集中打开的。一切工作都很好,除了当我的一个文件从应用程序外部打开时,它会像应该的那样打开应用程序并将文件加载到我的应用程序的文本编辑器中,就像它应该的那样。除了唯一的问题是将文件加载到文本编辑器中两次。我不知道为什么。任何人都可以解释一下吗?

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

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

我找到了我的问题的解决方案,我已经通过修复回答了我自己的问题。我不想感谢任何帮助过的人。 另外,我要感谢 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

答案如下。

【问题讨论】:

  • 这个sn-p代码是如何被调用的?
  • 还有其他地方调用此代码,或以任何方式触及列表视图吗?
  • 我添加了更多信息,提前感谢各位的帮助。
  • 那段代码会被调用两次吗?
  • 检查 Listview2.Items 开始和结束的计数

标签: .net vb.net visual-studio-2010 deployment


【解决方案1】:

它对您的问题没有帮助,但进行一些重构,您可以避免第二个循环:

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

【讨论】:

    【解决方案2】:

    我找到了解决问题的方法。我发现确实是代码触发了两次。最有可能与覆盖有关。不过,仍然不是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 2019-06-13
      • 2011-05-18
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多