2

アプリケーションにはSaveFileDialog、ユーザーがメディアをエクスポートできるさまざまな形式を提供するがあります。のFilterIndexプロパティを使用して、ユーザーが選択した形式を決定しますSaveFileDialog。さまざまな形式でファイル拡張子が異なるため、ユーザーが選択したフィルターを変更したときに、ユーザーが入力したファイル名で拡張子を変更する必要があります。これは可能ですか?もしそうなら、どのように?

編集:ダイアログが表示されている間、ユーザーがフィルターを変更したときにこれを実行したいので、ユーザーは後でダイアログを閉じたときではなく、ファイル名がどうなるかについてフィードバックを受け取ります。メッセージフィルターを使用してみましたが、ダイアログのメッセージを受信しません。試しましApplication.Idleたが、ダイアログの実行中に起動することはありません。バックグラウンドスレッドを試しましたがFilterIndex、ユーザーがダイアログを閉じるまで更新されません。

4

3 に答える 3

1

SaveFileDialogは継承できないため、FileDialogを基本クラスとして使用して独自に作成する必要があると思います。

于 2009-07-08T09:58:52.737 に答える
0

SaveFileDialogは、ユーザーがフィルターを変更すると、ファイルの拡張子を自動的に変更します。さまざまなファイル形式の特定のアクションを処理する場合は、次のようなものを使用できます。

...
if (saveDialog.ShowDialog() == DialogResult.OK)
{
    switch (saveDialog.FilterIndex)
    { 
        case 0:
            ...
            break;
        case 1:
            ...
            break;
        default:
            ...
            break;
    }
}
...
于 2009-07-08T09:36:25.853 に答える
-1

フィルタを追加します。

saveFileDialog1.Filter = "txt files (*.txt)|*.txt|Word files (*.doc)|*.doc";

それから:

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
  switch (saveFileDialog1.FilterIndex)
  {
    case 1:
      saveFileDialog1.FileName = System.IO.Path.ChangeExtension(saveFileDialog1.FileName, "txt");
      break;
    case 2:
      saveFileDialog1.FileName = System.IO.Path.ChangeExtension(saveFileDialog1.FileName, "doc");
      break;
  }
  // Here you would save your file with the filename in saveFileDialog1.FileName.
  MessageBox.Show(saveFileDialog1.FileName);
}

2回実行し、最初に「txtファイル」を選択してから「Wordファイル」を選択します。ファイル名として「test」を入力します。
text.txtとtest.docの両方の場合でファイル名が異なることがわかります。

「test.htm」のような拡張子の付いたファイル名を入力すると、フィルターを切り替えるときに拡張子が変更されます。

「test.htm」のようなファイル名を入力し、フィルターを変更しないでください。スイッチケースが拡張子を処理します。

于 2009-07-08T09:58:39.117 に答える