試していないのでこちらに書きますが、これで行けませんかね?
試しました。FileDrop
で行けました。
ファイルやディレクトリをエクスプローラへドラッグ&ドロップするには? - @IT
ファイルの検索を実現するためにはなにかプロパティの指定などが必要なのでしょうか?
ShellSearchFolder
にSearchCondition
を設定すればいいようです。
WindowsAPICodePackのExplorerBrowserControlについて調べても情報があまり見つけられす
Google検索で情報がない時は、GitHubを検索するのがおすすめです。
Search · ExplorerBrowser
トップに出てきたリポがそれっぽいのと、検索機能がありそうなスクショがありました。
Total-Explorer/browserExplorerTab.cs at main · Ericvf/Total-Explorer
さらに出てきたキーワード(SearchConditionFactory
とかCreateAndOrCondition
とか)をまた検索したりします。
Windows-API-Code-Pack-1.1/AdvancedSearch.xaml.cs at master · aybe/Windows-API-Code-Pack-1.1
あるいはVisual Studioでクラス等に定義ジャンプしてつらつら眺めたりします。
cs
1using System.IO;
2using System.Linq;
3using System.Text;
4using System.Windows.Forms;
5using Microsoft.WindowsAPICodePack.Controls;
6using Microsoft.WindowsAPICodePack.Controls.WindowsForms;
7using Microsoft.WindowsAPICodePack.Shell;
8using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
9
10namespace Q7dnj7xj3xxesgf
11{
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17
18 File.WriteAllText("foobar.utf8.txt", "ほげぴよ", new UTF8Encoding(true));
19 File.WriteAllText("foobar.utf8.log", "ほげぴよ", new UTF8Encoding(true)); // txtじゃないと中身まで見てくれない模様
20 File.WriteAllText("foobar.utf8n.txt", "ほげぴよ", new UTF8Encoding(false)); // bomなしも中身まで見てくれない模様
21 File.WriteAllText("foobar.sjis.txt", "ほげぴよ", Encoding.GetEncoding("shift-jis"));
22
23 var splitContainer1 = new SplitContainer { Dock = DockStyle.Fill, Parent = this, };
24
25 var listView1 = new ListView
26 {
27 Dock = DockStyle.Fill,
28 Parent = splitContainer1.Panel1,
29 View = View.Details,
30 };
31 listView1.Columns.Add("名前", 200);
32 foreach (var f in Directory.EnumerateFiles(Application.StartupPath))
33 {
34 var item = new ListViewItem { Tag = f, Text = Path.GetFileName(f), };
35 listView1.Items.Add(item);
36 }
37 listView1.ItemDrag += (s, e) =>
38 {
39 var paths = listView1.SelectedItems.Cast<ListViewItem>()
40 .Select(x => (string)x.Tag).ToArray();
41 var dataObj = new DataObject(DataFormats.FileDrop, paths);
42 listView1.DoDragDrop(dataObj, DragDropEffects.Copy);
43 };
44
45
46 var explorerBrowser1 = new ExplorerBrowser
47 {
48 Dock = DockStyle.Fill,
49 Parent = splitContainer1.Panel2,
50 };
51 explorerBrowser1.NavigationOptions.PaneVisibility.Navigation = PaneVisibilityState.Hide;
52 explorerBrowser1.NavigationOptions.PaneVisibility.Commands = PaneVisibilityState.Hide;
53
54 // ファイル名 Contains
55 //var sc1 = SearchConditionFactory.CreateLeafCondition(SystemProperties.System.FileName,
56 // "sjis", SearchConditionOperation.ValueContains);
57
58 // ワイルドカード
59 var sc2 = SearchConditionFactory.CreateLeafCondition(SystemProperties.System.FileName,
60 "foobar.*", SearchConditionOperation.DosWildcards);
61
62 // コンテンツ Contains
63 //var sc3 = SearchConditionFactory.CreateLeafCondition(SystemProperties.System.FullText,
64 // "ぴよ", SearchConditionOperation.ValueContains);
65
66 // 複合
67 // MDAが出るので何度か続行するか デバッグなしで実行
68 //var sc4 = SearchConditionFactory.CreateAndOrCondition(SearchConditionType.And, true,
69 // sc1, sc2);
70
71
72 var folder = (ShellContainer)ShellObject.FromParsingName(Application.StartupPath);
73 //var ssf = new ShellSearchFolder(sc1, folder);
74 var ssf = new ShellSearchFolder(sc2, folder);
75 //var ssf = new ShellSearchFolder(sc3, folder);
76 //var ssf = new ShellSearchFolder(sc4, folder);
77
78 explorerBrowser1.Navigate(ssf);
79 }
80 }
81}
追記 しょーもない解決策orz
cs
1using System.IO;
2using System.Linq;
3using System.Text;
4using System.Windows.Forms;
5using Microsoft.WindowsAPICodePack.Controls;
6using Microsoft.WindowsAPICodePack.Controls.WindowsForms;
7using Microsoft.WindowsAPICodePack.Shell;
8using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
9
10namespace Q7dnj7xj3xxesgf
11{
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17
18 File.WriteAllText("foobar.utf8.txt", "ほげぴよ", new UTF8Encoding(true));
19 File.WriteAllText("foobar.utf8.log", "ほげぴよ", new UTF8Encoding(true)); // txtじゃないと中身まで見てくれない模様
20 File.WriteAllText("foobar.utf8n.txt", "ほげぴよ", new UTF8Encoding(false)); // bomなしも中身まで見てくれない模様
21 File.WriteAllText("foobar.sjis.txt", "ほげぴよ", Encoding.GetEncoding("shift-jis"));
22
23 var splitContainer1 = new SplitContainer { Dock = DockStyle.Fill, Parent = this, };
24 var textBox1 = new TextBox { Dock = DockStyle.Top, Parent = this, };
25
26 var listView1 = new ListView
27 {
28 Dock = DockStyle.Fill,
29 Parent = splitContainer1.Panel1,
30 View = View.Details,
31 };
32 listView1.Columns.Add("名前", 200);
33 foreach (var f in Directory.EnumerateFiles(Application.StartupPath))
34 {
35 var item = new ListViewItem { Tag = f, Text = Path.GetFileName(f), };
36 listView1.Items.Add(item);
37 }
38 listView1.ItemDrag += (s, e) =>
39 {
40 var paths = listView1.SelectedItems.Cast<ListViewItem>()
41 .Select(x => (string)x.Tag).ToArray();
42 var dataObj = new DataObject(DataFormats.FileDrop, paths);
43 listView1.DoDragDrop(dataObj, DragDropEffects.Copy);
44 };
45
46
47 var explorerBrowser1 = new ExplorerBrowser
48 {
49 Dock = DockStyle.Fill,
50 Parent = splitContainer1.Panel2,
51 };
52 explorerBrowser1.NavigationOptions.PaneVisibility.Navigation = PaneVisibilityState.Hide;
53 explorerBrowser1.NavigationOptions.PaneVisibility.Commands = PaneVisibilityState.Hide;
54 explorerBrowser1.NavigationComplete += (s, e) =>
55 {
56 // とりあえずの飛ばした先なら本当にやりたい検索(う~~んどうなのよw
57 if (e.NewLocation == (ShellObject)KnownFolders.Computer)
58 {
59 var sc1 = SearchConditionFactory.CreateLeafCondition(SystemProperties.System.FileName,
60 textBox1.Text, SearchConditionOperation.ValueContains);
61 var folder = (ShellContainer)ShellObject.FromParsingName(Application.StartupPath);
62 var ssf = new ShellSearchFolder(sc1, folder);
63 explorerBrowser1.Navigate(ssf);
64 }
65 };
66
67 textBox1.TextChanged += (s, e) =>
68 {
69 // とりあえずどっかに飛ばす^^;
70 explorerBrowser1.Navigate((ShellObject)KnownFolders.Computer);
71 };
72
73 explorerBrowser1.Navigate((ShellObject)KnownFolders.Computer);
74 }
75 }
76}