「Avalonia UI - ダイアログ」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
61行目: 61行目:
<br>
<br>


==== Filterプロパティ(ファイルの種類)の設定 ====
==== Filtersプロパティ (ファイルの種類) の設定 ====
ダイアログで開くことができるファイルの種類は、<code>Filter</code>プロパティにフィルタ文字列を設定する。<br>
ダイアログで開くことができるファイルの種類は、<code>Filters</code>プロパティにフィルタ文字列を設定する。<br>
フィルタ文字列は、ファイルの説明とファイルの拡張子を<code>|</code>(バーティカルバー)で区切って表現する。<br>
<br>
<br>
<center>
フィルタ文字列の設定を以下に示す。<br>
表. フィルタ文字列の設定例<br>
* FileDialogFilterクラスの使用
{| class="wikitable" style="background-color:#fefefe;"
*: 各フィルタはFileDialogFilterオブジェクトとして定義される。
|-
* Nameプロパティ
! style="background-color:#00ffff;" | フィルタ
*: ユーザに表示されるフィルタの名前。
! style="background-color:#00ffff;" | フィルタ文字列
* Extensionsプロパティ
|-
*: 拡張子のリストであり、ワイルドカード (*) を含めずに指定する。
| すべてのファイル || "すべてのファイル (*.*)|*.*"
* 複数の拡張子
|-
*: 1つのフィルタに複数の拡張子を含めることができる。
| テキストファイル || "テキストファイル (*.txt)|*.txt"
* 全てのファイル
|-
*: 全てのファイルを表す場合は、拡張子として <code>"*"</code> を使用する。
| テキストファイルとすべてのファイル || "テキストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*"
* フィルタの順序
|-
*: リストに追加した順序でユーザに表示される。
| XMLファイル || "XML ファイル (*.xml)|*.xml"
|-
| HTMLファイル || "HTML ファイル (*.html, *.htm)|*.html;*.htm"
|-
| XMLファイルとHTMLファイルとすべてのファイル || "XML ファイル (*.xml)|*.xml|HTML ファイル (*.html, *.htm)|*.html;*.htm|すべてのファイル (*.*)|*.*"
|-
| イメージファイル || "イメージファイル (*.png, *.jpg, *.gif, *bmp)|*.png;*.jpg;*.gif;*bmp"
|}
</center>
<br>
<br>
ファイルの種類を複数設定する時、起動時に選択するファイルの種類を指定する場合は、<br>
WinFormsとの主な違いを、以下に示す。<br>
<code>FilterIndex</code>プロパティにインデックス値を指定する。(既定値 : 1)<br>
* Avalonia UIでは、拡張子にワイルドカード (*) を含めずに、単に拡張子名のみを指定する。
* 複数の拡張子やファイルタイプを1つのフィルタにまとめる場合、<code>Extensions</code>リストに全ての拡張子を追加する。
* フィルタ間の区切り (<code>|</code>) は使用せず、代わりに別の<code>FileDialogFilter</code>オブジェクトを作成する。
<br>
<br>
プルダウンの先頭の項目において、2番目の項目は2を指定する。(<u>プルダウンのインデックスは、1から始まるので注意</u>)<br>
<syntaxhighlight lang="c#">
ユーザが選択したファイルの種類を保持しておき、次回に選択するファイルの種類を設定する時に便利なプロパティである。<br>
using Avalonia.Controls;
using System.Collections.Generic;
public class FileDialogExample
{
    public void ShowFileDialog()
    {
      var dialog = new OpenFileDialog();
      dialog.Filters = new List<FileDialogFilter>
      {
          new FileDialogFilter { Name = "すべてのファイル", Extensions = new List<string> { "*" } },
          new FileDialogFilter { Name = "テキストファイル", Extensions = new List<string> { "txt" } },
          new FileDialogFilter { Name = "テキストファイルとすべてのファイル", Extensions = new List<string> { "txt", "*" } },
          new FileDialogFilter { Name = "XMLファイル", Extensions = new List<string> { "xml" } },
          new FileDialogFilter { Name = "HTMLファイル", Extensions = new List<string> { "html", "htm" } },
          new FileDialogFilter { Name = "XMLファイルとHTMLファイルとすべてのファイル", Extensions = new List<string> { "xml", "html", "htm", "*" } },
          new FileDialogFilter { Name = "イメージファイル", Extensions = new List<string> { "png", "jpg", "gif", "bmp" } }
      };
      // ファイル選択ダイアログを表示
      var result = await dialog.ShowAsync(this);
      if (result != null)
      {
          foreach (var path in result)
          {
            System.Console.WriteLine($"Selected file: {path}");
          }
      }
    }
}
</syntaxhighlight>
<br>
<br>
==== 使用例 ====
==== 使用例 ====
ダイアログを表示する場合は、OpenFileDialogクラスのShowAsyncメソッドを実行する。<br>
ダイアログを表示する場合は、OpenFileDialogクラスのShowAsyncメソッドを実行する。<br>

2024年9月25日 (水) 12:16時点における版

概要



ファイル選択タイアログ

OpenFileDialogのプロパティ

下表に、ファイル選択ダイアログのプロパティのうち、設定を意識する必要がある主なプロパティを示す。

表. OpenFileDialogの主なプロパティ
プロパティ名 データ型 意味
AllowMultiple bool 複数ファイルの選択を許可するかどうかを指定する。
許可する場合はtrue、単一のファイルのみの場合はfalseを指定する。(既定値 : false)
Directory string ダイアログが開かれる初期ディレクトリを指定する。
Filters List<FileDialogFilter> ダイアログに表示されるファイルタイプを制限する。
InitialFileName string ダイアログに表示される初期ファイル名を指定する。
Title string ファイル選択ダイアログのウインドウタイトルを指定する。


WinFormsにあるような以下に示すプロパティは存在しない。
そのため、Avalonia UIでの代替方法を以下に示す。

  • AddExtension (拡張子が入力されない場合、自動的に拡張子を付けるかどうか)
    Avalonia UIでは、この機能は自動的に処理される。
    Filtersプロパティで指定された拡張子が使用される。

  • CheckFileExistsプロパティ / CheckPathExistsプロパティ
    Avalonia UIでは、これらの検証はファイル選択後に手動で行う必要がある。

  • FileNameプロパティ / FileNamesプロパティ (選択したファイルパスを取得)
    Avalonia UIでは、OpenFileDialogクラスのShowAsyncメソッドの戻り値を使用する。

  • FilterIndexプロパティ (ファイルの種類のプルダウンの選択肢リストの初期選択インデックスを指定)
    Avalonia UIでは、Filtersプロパティを使用してファイルタイプを制御する。
    特定のフィルタを選択する場合は、Filtersリストの順序を調整する。

  • Multiselectプロパティ (複数のファイルを選択できるかどうかを指定)
    Avalonia UIでは、AllowMultipleプロパティを使用する。
    dialog.AllowMultiple = true; // 複数ファイルの選択を許可

  • ReadOnlyCheckedプロパティ (読み取り専用として開くチェックボックスのON/OFFを設定または取得)
  • ShowReadOnlyプロパティ (読み取り専用として開くチェックボックスを表示するかどうかを設定)
    Avalonia UIでは、これらの機能は直接サポートされていない。
    必要に応じてカスタムダイアログを実装する、あるいは、ファイル選択後に読み取り専用の状態を確認・設定するロジックを実装する必要がある。

  • SafeFileNameプロパティ (選択した拡張子を含むファイル名のみ(パスは含まない)を取得)
  • SafeFileNamesプロパティ (選択した複数の拡張子を含むファイル名のみ(パスは含まない)を取得)
    Avalonia UIでは、これらの概念は直接サポートされていない。
    必要に応じて、選択されたファイルパスから安全なファイル名を抽出するロジックを実装する必要がある。

  • ShowHelpプロパティ (ヘルプボタン[?]を表示するかどうかを指定)
    Avalonia UIのファイルダイアログでは、ヘルプ機能は標準では提供されていない。
    必要に応じて、別途ヘルプ機能を実装する必要がある。


Filtersプロパティ (ファイルの種類) の設定

ダイアログで開くことができるファイルの種類は、Filtersプロパティにフィルタ文字列を設定する。

フィルタ文字列の設定を以下に示す。

  • FileDialogFilterクラスの使用
    各フィルタはFileDialogFilterオブジェクトとして定義される。
  • Nameプロパティ
    ユーザに表示されるフィルタの名前。
  • Extensionsプロパティ
    拡張子のリストであり、ワイルドカード (*) を含めずに指定する。
  • 複数の拡張子
    1つのフィルタに複数の拡張子を含めることができる。
  • 全てのファイル
    全てのファイルを表す場合は、拡張子として "*" を使用する。
  • フィルタの順序
    リストに追加した順序でユーザに表示される。


WinFormsとの主な違いを、以下に示す。

  • Avalonia UIでは、拡張子にワイルドカード (*) を含めずに、単に拡張子名のみを指定する。
  • 複数の拡張子やファイルタイプを1つのフィルタにまとめる場合、Extensionsリストに全ての拡張子を追加する。
  • フィルタ間の区切り (|) は使用せず、代わりに別のFileDialogFilterオブジェクトを作成する。


 using Avalonia.Controls;
 using System.Collections.Generic;
 
 public class FileDialogExample
 {
    public void ShowFileDialog()
    {
       var dialog = new OpenFileDialog();
       dialog.Filters = new List<FileDialogFilter>
       {
          new FileDialogFilter { Name = "すべてのファイル", Extensions = new List<string> { "*" } },
          new FileDialogFilter { Name = "テキストファイル", Extensions = new List<string> { "txt" } },
          new FileDialogFilter { Name = "テキストファイルとすべてのファイル", Extensions = new List<string> { "txt", "*" } },
          new FileDialogFilter { Name = "XMLファイル", Extensions = new List<string> { "xml" } },
          new FileDialogFilter { Name = "HTMLファイル", Extensions = new List<string> { "html", "htm" } },
          new FileDialogFilter { Name = "XMLファイルとHTMLファイルとすべてのファイル", Extensions = new List<string> { "xml", "html", "htm", "*" } },
          new FileDialogFilter { Name = "イメージファイル", Extensions = new List<string> { "png", "jpg", "gif", "bmp" } }
       };
 
       // ファイル選択ダイアログを表示
       var result = await dialog.ShowAsync(this);
       if (result != null)
       {
          foreach (var path in result)
          {
             System.Console.WriteLine($"Selected file: {path}");
          }
       }
    }
 }


使用例

ダイアログを表示する場合は、OpenFileDialogクラスのShowAsyncメソッドを実行する。
ShowAsyncメソッドは、非同期で動作してTask<string[]>型を返す。
これにより、UIがブロックされることなくファイル選択操作を行うことができる。

ShowAsyncメソッドの戻り値がnullではないこと、および、配列の長さが0より大きいことを常に確認することが重要である。
これにより、ユーザがファイルを選択せずにダイアログを閉じた場合や操作をキャンセルした場合にも適切に対応することができる。

 using Avalonia.Controls;
 using System.Collections.Generic;
 
 var dialog = new OpenFileDialog();
 dialog.Filters.Add(new FileDialogFilter() { Name = "テキストファイル", Extensions = { "txt" } });
 dialog.AllowMultiple = false;
 dialog.Directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
 dialog.Title = "テキストファイルを選択してください";
 
 var result = await dialog.ShowAsync(this);
 if (result != null && result.Length > 0)
 {
    string selectedFilePath    = result[0];  // 単一ファイルの場合
    string[] selectedFilePaths = result;     // 複数ファイルの場合
 
    // 選択されたファイルを処理
    // ...略
 }