0

あちこち探しましたが、探しているものが見つかりません。私が欲しいのは、「保存」メニュー(「名前を付けて保存...」ではなく)のsaveToolStripMenuItem_Clickイベントハンドラーのコードであり、アプリで次のことを確認します。

  1. 現在のファイルは既に保存されているため、既にファイル名があります。

  2. 現在のファイルは、開かれてから変更されています。

  3. [名前を付けて保存] ダイアログを表示せずに、既存のファイルを上書き (または必要に応じて追加) します。

  4. ファイルが存在しない場合は、[名前を付けて保存...] メニューが表示されます。

私の「名前を付けて保存...」メニューはすでに正常に動作しています。私が見つけたものはすべて、私がすでに知っている「名前を付けて保存..」ダイアログを作成する方法を教えてくれます。私がダウンロードしたすべてのサンプル プログラムには、この機能がありません。

どんな助けでも大歓迎です。

4

2 に答える 2

1

ポイント1は本当にあなたの解決策です。

Filename現在のドキュメントのファイル名を保持する文字列変数を保持する必要があります。新しいドキュメントを作成する場合Filenameは、 null. Save次に、またはをクリックSave As...してもユーザーがダイアログをキャンセルしない場合は、結果FileDialog.FileNameFilename変数に格納してから、ファイルの内容を書き込みます。

Saveユーザーがもう一度クリックするFilenameと、 に値があるかどうかを確認し、値がある場合は表示せずSaveFileDialog、単にファイルに再度書き込みます。

コードは次のようになります。

private String _filename;

void saveToolStripMenuItem_Click()
{
    if (String.IsNullOrEmpty(_filename))
    {
        if (ShowSaveDialog() != DialogResult.OK)
        {
            return;
        }
    }

    SaveCurrentFile();
}

void saveAsToolStripMenuItem_Click()
{
    if (ShowSaveDialog() != DialogResult.OK)
    {
        return;
    }

    SaveCurrentFile();
}

DialogResult ShowSaveDialog()
{
    var dialog = new SaveFileDialog();
    // set your path, filter, title, whatever
    var result = dialog.ShowDialog();

    if (result == DialogResult.OK)
    {
        _filename = result.FileName;
    }

    return result;
}

void SaveCurrentFile()
{
    using (var writer = new StreamWriter(_filename))
    {
        // write your file
    }
}
于 2012-07-11T09:21:03.667 に答える
0

を使用してカスタムを記述することにより、ポイントとして記載されている要件を達成できます。

System.IO.FileOptions および System.IO.File メソッド

http://msdn.microsoft.com/en-us/library/system.io.file_methods

于 2012-07-11T09:16:29.117 に答える