4

OpenFileDialog を開くコードがあります。ファイルのサイズをチェックして、特定の制限を超えていないことを確認しています。ただし、ユーザーが大きなサイズのファイルを選択した場合は、警告を発し、ダイアログに戻って別のファイルを選択するか、[キャンセル] をクリックする必要があります。

これは私が試したことです:

        OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
        while (dialog.ShowDialog() != DialogResult.Cancel)
        {
                var size = new FileInfo(dialog.FileName).Length;
                if (size > 250000)
                {
                    MessageBox.Show("File size exceeded");
                    continue;
                }
        }

編集:次のコードも試しましたが、ShowDialog が呼び出されるたびにダイアログが開きます。したがって、ユーザーが制限の 3 倍のサイズのファイルを選択した場合、ダイアログは 3 回表示されます。

  OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
        dialog.FileOk += delegate(object s, CancelEventArgs ev)
        {
            var size = new FileInfo(dialog.FileName).Length;
            if (size > 250000)
            {
                XtraMessageBox.Show("File size");
                dialog.ShowDialog();
            }
        };
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            XtraMessageBox.Show("File Selected");
        }
4

4 に答える 4

8

あなたはそこにいる途中です.FileOkイベントはあなたが使いたいものです. あなたが見逃しているのは、e.Cancel プロパティを true に設定することです。これにより、ダイアログが開いたままになり、何度も表示する必要がなくなります。このような:

        OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
        dialog.FileOk += delegate(object s, CancelEventArgs ev) {
            var size = new FileInfo(dialog.FileName).Length;
            if (size > 250000) {
                MessageBox.Show("Sorry, file is too large");
                ev.Cancel = true;             // <== here
            }
        };
        if (dialog.ShowDialog() == DialogResult.OK) {
            MessageBox.Show(dialog.FileName + " selected");
        }
于 2012-10-07T14:32:33.087 に答える
1

ev.Cancel = true; 次のコードが目的を満たしているかどうかを確認してください。

    public void SomeMethod()
    {
        OpenFileDialog dialog = new OpenFileDialog();
        dialog.FileOk += new CancelEventHandler(dialog_FileOk);
        dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
        dialog.ShowDialog();
    }

    void dialog_FileOk(object sender, CancelEventArgs e)
    {
        OpenFileDialog dialog = sender as  OpenFileDialog;
        var size = new FileInfo(dialog.FileName).Length;
        if (size > 250000)
        {
            MessageBox.Show("File size exceeded");
            e.Cancel = true;
          }

    }
于 2012-10-07T05:25:17.920 に答える
0

はい、あなたの要件に関する限り、これは問題ありませんが、一般に、サイズのプロンプトを表示した後にダイアログを開くことは最善の方法ではありません。代わりに、プロンプトを表示する必要があります。メイン ウィンドウからサイズの検証エラーを表示するのが最適です。また、HCI のユーザビリティの原則に従って、ファイル ダイアログを再度開いて適切なファイルを再度選択することは、ユーザーの義務です。

于 2012-10-07T05:09:17.690 に答える
0

FileDialog.FileOkにハンドラーを追加し、その中のファイル サイズを確認します。

于 2012-10-07T05:27:03.647 に答える