1

古いレガシ Windows フォーム アプリケーションを維持する必要があります。ソースコードを入手しただけで、ドキュメントなどはありません。64 ビット Windows 8.1 で実行されている Visual Studio 2015 と .NET Framework 4.5 を使用してアプリケーションを構築しています。FileViewerという名前のVbPowerPack(バージョン1.0.1644.16184、完全に古い)コントロールを使用してフォルダーの内容を表示し、そのペインが表示されるように設定されているのは初めて例外をスローし続けることを除いて、すべてが正常に機能します

System.OverflowException: Arithmetic operation resulted in an overflow.
   at System.IntPtr.ToInt32()
   at VbPowerPack.ShellFolder.GetTypeDescriptionForFile(String in_path) in C:\Documents and Settings\Ken\My Documents\Visual Studio Projects\VbPowerPack Source\VbPowerPack\ShellFolder.vb:line 264
   at VbPowerPack.FileViewer.populateControl() in C:\Documents and Settings\Ken\My Documents\Visual Studio Projects\VbPowerPack Source\VbPowerPack\FileViewer.vb:line 992
   at VbPowerPack.FileViewer.CreateHandle() in C:\Documents and Settings\Ken\My Documents\Visual Studio Projects\VbPowerPack Source\VbPowerPack\FileViewer.vb:line 866
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.TabPage.set_Visible(Boolean value)
   at System.Windows.Forms.TabControl.UpdateTabSelection(Boolean updateFocus)
   at System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs e)
   at System.Windows.Forms.TabControl.WmSelChange()
   at System.Windows.Forms.TabControl.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

(私は例外で言及されている Ken ではないことに注意してください。DLL は彼のコンピューターでコンパイルされている必要があります。インターネットで見つかった同じ DLL の別のインスタンスを使用すると、Ken の部分がなくても同じ例外が発生します。 )

例外のスクリーンショット

その後、「ハンドルされていない例外ウィンドウ」で「続行」をクリックし、別のタブをクリックしてから、これをもう一度試してみると、例外が再度スローされることなくコントロールが表示されますが、フォルダーの内容はありません。

このソリューション内で新しく作成された空の Windows フォーム プロジェクトで、同じコントロールを新しいフォームに追加しようとしましたが、同じように動作します。しかし、新しい Windows フォーム プロジェクトで新しい空のソリューションを作成し、FileViewer コントロールのみを使用すると、正常に動作します。また、フォームをデザイン ビュー (アプリケーションを実行していない) で開くと、問題のあるソリューションで機能し、フォルダーの内容が表示されます。デバッグを試みましたが、「VisibleChanged」などのイベントをトリガーする前に例外がスローされます。また、これに影響を与える可能性のある他のコードをコメントアウトしようとしましたが、うまくいきませんでした。コントロールの初期化方法は次のとおりです

public partial class DocumentsForm
{
    private VbPowerPack.FileViewer fileViewer;
    ...

    private void InitializeComponent()
    {
        this.fileViewer = new VbPowerPack.FileViewer();
        ...
        this.fileViewer.AllowDrop = true;
        this.fileViewer.ContextMenu = this.contextMenuFiles;
        this.fileViewer.Dock = System.Windows.Forms.DockStyle.Fill;
        this.fileViewer.HideSelection = false;
        this.fileViewer.Location = new System.Drawing.Point(0, 34);
        this.fileViewer.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
        this.fileViewer.Name = "fileViewer";
        this.fileViewer.Path = "c:\\";
        this.fileViewer.Size = new System.Drawing.Size(842, 482);
        this.fileViewer.Sorting = System.Windows.Forms.SortOrder.Ascending;
        this.fileViewer.TabIndex = 0;
        this.fileViewer.UseCompatibleStateImageBehavior = false;
        this.fileViewer.ItemClicked += new VbPowerPack.FileViewer.ItemClickedEventHandler(this.fileViewer_ItemClicked);
        this.fileViewer.ItemDoubleClicked += new VbPowerPack.FileViewer.ItemDoubleClickedEventHandler(this.fileViewer_ItemDoubleClicked);
        this.fileViewer.LocationChanged += new System.EventHandler(this.fileViewer_LocationChanged);
        this.fileViewer.VisibleChanged += new System.EventHandler(this.fileViewer_VisibleChanged);
        this.fileViewer.DragDrop += new System.Windows.Forms.DragEventHandler(this.fileViewer_DragDrop);
        this.fileViewer.DragEnter += new System.Windows.Forms.DragEventHandler(this.fileViewer_DragEnter);
        ...
        this.Controls.Add(this.fileViewer);
        ...
    }
}

ここ数日苦戦中。どんな助けや提案も大歓迎です。

4

1 に答える 1