Skip to content

Instantly share code, notes, and snippets.

@orange-in-space
Created December 11, 2019 13:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save orange-in-space/152432bafbc8d8738c1321324b0eb3db to your computer and use it in GitHub Desktop.
Save orange-in-space/152432bafbc8d8738c1321324b0eb3db to your computer and use it in GitHub Desktop.
C# File Common Dialogs Filter Support Class(OpenFileDialogとかのフィルターの文字列ってエレガントじゃないので直接書かないでいいように作った微妙なクラス><)
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