Hello, i am working on a program which should include an File-Explorer system. So I wanted to program the Explorer seperatly from the main project (for now) and planned to implement it, as soon as it works (i hop i can manage it somehow)
Visual Studio (2019) gives an error (CS1061)
'IDisposable' does not contain a definition for 'Handle' and no accessible extension method 'Handle' accepting a first argument of type 'IDisposable' could be found (are you missing a using directive or an assembly reference?).
The error occurs at line 188 (use ctrl + f and copy - paste: "
System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(icon.Handle,
" to find Line 188 in code)
So my Code is the following
1 using System;
2 using System.Collections.Generic;
3 using System.Collections.ObjectModel;
4 using System.Drawing;
5 using System.IO;
6 using System.Linq;
7 using System.Runtime.InteropServices;
8 using System.Text;
9 using System.Windows.Media;
10 using System.Windows.Media.Imaging;
11 using static FileExplorer.MainWindow;
12
13 namespace FileExplorer
14 {
15 class FileSystem
16 {
17 }
18
19 public class FileSystemObjectInfo : BaseObject
20 {
21 public FileSystemObjectInfo(DriveInfo drive)
22 : this(drive.RootDirectory)
23 {
24 }
25
26 public FileSystemObjectInfo(FileSystemInfo info)
27 {
28 }
29
30 internal class DummyFileSystemObjectInfo : FileSystemObjectInfo
31 {
32 public DummyFileSystemObjectInfo()
33 : base(new DirectoryInfo("DummyFileSystemObjectInfo"))
34 {
35 }
36 }
37
38 public event EventHandler BeforeExpand;
39
40 public event EventHandler AfterExpand;
41
42 public event EventHandler BeforeExplore;
43
44 public event EventHandler AfterExplore;
45
46 private void RaiseBeforeExpand()
47 {
48 BeforeExpand?.Invoke(this, EventArgs.Empty);
49 }
50
51 private void RaiseAfterExpand()
52 {
53 AfterExpand?.Invoke(this, EventArgs.Empty);
54 }
55
56 private void RaiseBeforeExplore()
57 {
58 BeforeExplore?.Invoke(this, EventArgs.Empty);
59 }
60
61 private void RaiseAfterExplore()
62 {
63 AfterExplore?.Invoke(this, EventArgs.Empty);
64 }
65
66
67 public ObservableCollection<FileSystemObjectInfo> Children
68 {
69 get { return base.GetValue<ObservableCollection<FileSystemObjectInfo>>("Children"); }
70 private set { base.SetValue("Children", value); }
71 }
72
73 public ImageSource ImageSource
74 {
75 get { return base.GetValue<ImageSource>("ImageSource"); }
76 private set { base.SetValue("ImageSource", value); }
77 }
78
79 public bool IsExpanded
80 {
81 get { return base.GetValue<bool>("IsExpanded"); }
82 set { base.SetValue("IsExpanded", value); }
83 }
84
85 public FileSystemInfo FileSystemInfo
86 {
87 get { return base.GetValue<FileSystemInfo>("FileSystemInfo"); }
88 private set { base.SetValue("FileSystemInfo", value); }
89 }
90
91 private DriveInfo Drive
92 {
93 get { return base.GetValue<DriveInfo>("Drive"); }
94 set { base.SetValue("Drive", value); }
95 }
96
97
98 private void AddDummy()
99 {
100 this.Children.Add(new DummyFileSystemObjectInfo());
101 }
102
103 private bool HasDummy()
104 {
105 return !object.ReferenceEquals(this.GetDummy(), null);
106 }
107
108 private DummyFileSystemObjectInfo GetDummy()
109 {
110 var list = this.Children.OfType<DummyFileSystemObjectInfo>().ToList();
111 if (list.Count > 0) return list.First();
112 return null;
113 }
114
115 private void RemoveDummy()
116 {
117 this.Children.Remove(this.GetDummy());
118 }
119
120
121 private void ExploreDirectories()
122 {
123 if (Drive?.IsReady == false)
124 {
125 return;
126 }
127 if (FileSystemInfo is DirectoryInfo)
128 {
129 var directories = ((DirectoryInfo)FileSystemInfo).GetDirectories();
130 foreach (var directory in directories.OrderBy(d => d.Name))
131 {
132 if ((directory.Attributes & FileAttributes.System) != FileAttributes.System &&
133 (directory.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
134 {
135 var fileSystemObject = new FileSystemObjectInfo(directory);
136 fileSystemObject.BeforeExplore += FileSystemObject_BeforeExplore;
137 fileSystemObject.AfterExplore += FileSystemObject_AfterExplore;
138 Children.Add(fileSystemObject);
139 }
140 }
141 }
142 }
143
144 private void FileSystemObject_AfterExplore(object sender, EventArgs e)
145 {
146 RaiseAfterExplore();
147 }
148
149 private void FileSystemObject_BeforeExplore(object sender, EventArgs e)
150 {
151 RaiseBeforeExplore();
152 }
153
154
155 private void ExploreFiles()
156 {
157 if (Drive?.IsReady == false)
158 {
159 return;
160 }
161 if (FileSystemInfo is DirectoryInfo)
162 {
163 var files = ((DirectoryInfo)FileSystemInfo).GetFiles();
164 foreach (var file in files.OrderBy(d => d.Name))
165 {
166 if ((file.Attributes & FileAttributes.System) != FileAttributes.System &&
167 (file.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
168 {
169 Children.Add(new FileSystemObjectInfo(file));
170 }
171 }
172 }
173 }
174
175
176
177 public static class FolderManager
178 {
179 public static ImageSource GetImageSource(string directory, ItemState folderType)
180 {
181 return GetImageSource(directory, new Size(16, 16), folderType);
182 }
183
184 public static ImageSource GetImageSource(string directory, Size size, ItemState folderType)
185 {
186 using (var icon = ShellManager.GetIcon(directory, ItemType.Folder, IconSize.Large, folderType))
187 {
188 Return System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(icon.Handle,
189 System.Windows.Int32Rect.Empty,
190 BitmapSizeOptions.FromWidthAndHeight(size.Width, size.Height));
191 }
192 }
193 }
194
195
196
203
204
205 class FileSystem : IDisposable
206 {
207
208 bool disposed = false;
209
210 FileStream fs = new FileStream("test.txt", FileMode.OpenOrCreate);
211
212
213 public void Dispose()
214 {
215 Dispose(disposing: true);
216 GC.SuppressFinalize(this);
217 }
218
219
220 protected virtual void Dispose(bool disposing)
221 {
222 if (disposed)
223 return;
224
225 if (disposing)
226 {
227 fs.Dispose();
228
229
230
231 }
232
233 disposed = true;
234 }
235 }
236
237
238
239 public class ShellManager : ShellManagerBase
240 {
241 internal static IDisposable GetIcon(string directory, ItemType folder, IconSize large, ItemState folderType)
242 {
243 throw new NotImplementedException();
244 }
245 }
246
247 }
248
249 internal class Icon
250 {
251 internal static object FromHandle(object hIcon)
252 {
253 throw new NotImplementedException();
254 }
255 }
256 }
What I have tried:
I've tried a lot of things but just can't fix the error
I really need your help :(
Thanks i.a.