Created
December 11, 2019 13:54
-
-
Save orange-in-space/152432bafbc8d8738c1321324b0eb3db to your computer and use it in GitHub Desktop.
C# File Common Dialogs Filter Support Class(OpenFileDialogとかのフィルターの文字列ってエレガントじゃないので直接書かないでいいように作った微妙なクラス><)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections.Generic; | |
namespace Orange.Fragment | |
{ | |
// | |
// File Common Dialogs Filter Support Class !><; | |
// (C) orange_in_space | |
// Licence: CC0 | |
// | |
// OpenFileDialogとかのフィルターの文字列ってエレガントじゃないので直接書かないでいいように作った微妙なクラス>< | |
// | |
// | |
// --Example--- | |
// | |
//LpstrFilter lpstrFilter = new LpstrFilter(); | |
//lpstrFilter.Add(LpstrFilter.Element.CreateFromExtensions("textFile!!!", new string[] { "txt", "text", "tekisutofairu" })); | |
// lpstrFilter.Add(LpstrFilter.Element.CreateFromExtensions("Picture, maybe", new string[] { "png", "jpeg", "jpg" })); | |
// lpstrFilter.Add(LpstrFilter.Element.CreateAllFilesElement()); | |
// lpstrFilter.Add(LpstrFilter.Element.CreateAllFilesElement("Lemon Eating Face")); | |
// using (OpenFileDialog opendialog = new OpenFileDialog()) | |
// { | |
// opendialog.Filter = lpstrFilter.ToString(); | |
// if (opendialog.ShowDialog() == DialogResult.OK) | |
// { | |
// //OK!>< | |
// } | |
// } | |
// ------------ | |
public class LpstrFilter : List<LpstrFilter.Element> | |
{ | |
public class Element | |
{ | |
public string RawTitle { get; set; } | |
public string FilterString { get; set; } | |
public Element(string rawTitle, string filter) | |
{ | |
RawTitle = rawTitle; | |
FilterString = filter; | |
} | |
public static Element CreateFromExtensions(string title, string[] extensions) | |
{ | |
string[] extensions_wildcard_string = new string[extensions.Length]; | |
for (int i = 0; i < extensions.Length; i++) | |
{ | |
extensions_wildcard_string[i] = "*." + extensions[i];// ... ><; | |
} | |
return new Element( | |
title + " (" + string.Join("; ", extensions_wildcard_string) + ")", | |
string.Join(";", extensions_wildcard_string)); | |
} | |
public static Element CreateAllFilesElement(string title = "All Files") | |
{ | |
return new Element(title + " (*.*)", "*.*"); | |
} | |
public override string ToString() | |
{ | |
return RawTitle + "|" + FilterString; | |
} | |
//dare toku><; | |
public string Win32FormatString | |
{ | |
get | |
{ | |
return RawTitle + "\0" + FilterString; | |
} | |
} | |
} | |
public LpstrFilter() : base() | |
{ | |
} | |
public override string ToString() | |
{ | |
return ManagedFormatString; | |
} | |
public string ManagedFormatString | |
{ | |
get | |
{ | |
return string.Join("|", this); | |
} | |
} | |
//dare toku><; | |
public string[] Win32FormatStringArray | |
{ | |
get | |
{ | |
string[] result = new string[this.Count]; | |
for (int i = 0; i < this.Count; i++) | |
{ | |
result[i] = this[i].Win32FormatString; | |
} | |
return result; | |
} | |
} | |
public string Win32FormatString | |
{ | |
get | |
{ | |
return string.Join("\0", this.Win32FormatStringArray) + "\0\0"; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment