Мне нужно сохранить старое устаревшее приложение Windows Forms. Я просто получил исходный код, документацию или что-то еще. Я создаю приложение с помощью Visual Studio 2015, работающего на 64-разрядной версии Windows 8.1 и использующей .NET Framework 4.5. Все работает отлично, за исключением одного, для отображения содержимого папки используется элемент управления VbPowerPack (версия 1.0.1644.16184, tottaly) с именем FileViewer, и он просто перестает бросать исключение в первый раз, когда панель установлена на видWindows Forms - VbPowerPack v1 FileViewer, бросающий неожиданное исключение
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)
(Обратите внимание, что я не Кен, упомянутый в исключении, DLL, должно быть, была скомпилирована на его компьютере, и я получаю то же исключение, только без части Кена, если я использую другой экземпляр того же DLL найти в интернете)
после этого, если щелчок «Cont inue "в« Необработанном окне исключений », и я нажимаю на другую вкладку, а затем снова пытаюсь выполнить это, показывая элемент управления, если исключение не будет сброшено снова, но ни один из содержимого папки не существует.
Я попытался добавить тот же элемент управления новой формы во вновь созданный пустой проект Windows Forms внутри этого решения, и он ведет себя одинаково. Но когда я создаю новое пустое решение с новым проектом Windows Forms и использую только элемент управления 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);
...
}
}
Борьба в течение нескольких дней. Любая помощь и предложения приветствуются.
Что вы делаете в некоторых из этих событий? В частности, LocationChanged и VisibleChanged. – LarsTech
В этих событиях не было кода, я добавил туда фиктивный код, чтобы попытаться остановить отладчик там. События, у которых есть код, - это ItemClicked, ItemDoubleClicked, DragDrop и DragEnter, и ни один из них не запускается, когда отображается элемент управления, правильно? –
вы можете прокомментировать весь код во всех случаях, чтобы быть уверенным, – GuidoG