0

イベント私はファイルがmydocumentsに保存される別の場所を指定します。この問題を解決する方法。plsはあなたのアイデアを共有します。ここにコードがあります。

          if (externalButton.Checked == true)
            {
               // int i = 1;
                saveFileDialog.Title = "Save the Proofer Report";
                saveFileDialog.Filter = "Document Files (*.doc)|*.doc|Document Files (*.docx)|*.docx";
                saveFileDialog.FilterIndex = 0;
                saveFileDialog.InitialDirectory = "MyDocuments";
                saveFileDialog.FileName = "Proofer Report -- " +  Path.GetFileName((string)fileName) + ".doc";
                //i.tostring()
                saveFileDialog.DefaultExt = ".doc"; 


                saveFileDialog.ShowHelp = true;
                // saveFileDialog.ShowDialog();
                var thread = new Thread(new ParameterizedThreadStart(param => { saveFileDialog.ShowDialog(); }));
                thread.SetApartmentState(ApartmentState.STA);
                thread.Start();
                fname = saveFileDialog.FileName;
4

2 に答える 2

3

ダイアログが表示される前にスレッドの実行を開始した後、新しいスレッドとコードで非同期にダイアログを表示しています(ほとんどの場合)。

スレッドの完了を待つか、ダイアログを閉じた後に保存先をそのスレッドに移動します。

于 2013-02-13T06:42:34.877 に答える
0

なぜsaveFileDialog別のスレッドに表示されているのですか? 別のスレッドで保存ダイアログを表示する場合fname = saveFileDialog.FileName;は、常に null を返します。別のスレッドを使用しないでください。または、スレッドの開始後にこのイベントを呼び出します

saveFileDialog1.FileOk += new CancelEventHandler(saveFileDialog1_FileOk);
 void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            string fname = null;
            fname = saveFileDialog1.FileName;
        }

編集済み

 public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
            _SaveFileDialog.FileOk += new CancelEventHandler(_SaveFileDialog_FileOk);
        }
        string filename = null;
        SaveFileDialog _SaveFileDialog = new SaveFileDialog();
        private void savebtn_Click(object sender, EventArgs e)
        {
            _SaveFileDialog.Title = "Save the Proofer Report";
            _SaveFileDialog.Filter = "Document Files (*.doc)|*.doc|Document Files (*.docx)|*.docx";
            _SaveFileDialog.FilterIndex = 0;
            _SaveFileDialog.InitialDirectory = "MyDocuments";
            _SaveFileDialog.FileName = "Proofer Report -- .doc";
            _SaveFileDialog.DefaultExt = ".doc";
            _SaveFileDialog.ShowHelp = true;
            var thread = new Thread(new ParameterizedThreadStart(param => { _SaveFileDialog.ShowDialog(); }));
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }
        void _SaveFileDialog_FileOk(object sender, CancelEventArgs e)
        {
            filename = _SaveFileDialog.FileName;
        }
    }
于 2013-02-13T06:46:29.813 に答える