С# - SaveFileDialog не отображается как активное окно

Я делаю небольшую программу, чтобы открыть электронную таблицу Excel, обновить ее, затем сохранить в новый файл, а затем закрыть все.

Все это в основном работает, за исключением случаев, когда я использую SaveFileDialog, всплывающее окно скрыто за окном Excel, только с первой попытки (последующие попытки, запускаемые кнопкой, все работают с SaveFileDialog, выходящим на передний план).

Кто-нибудь знает, как я могу заставить это произойти и в 1-м случае?

Я также хочу знать, возможно ли не выделять имя файла, чтобы пользователь мог добавить его к имени файла вместо того, чтобы напрямую перезаписывать его, как правило, по ошибке?

Вот код, который я использую для savefiledialog...

SaveFileDialog saver = new SaveFileDialog();
            saver.FileName = "test";
            saver.DefaultExt = "xls";
            saver.Filter = "Microsoft Office Excel Workbook |(*.xls*)";
            saver.CheckFileExists = false;
            saver.InitialDirectory = "c:\\George";

        if (saver.ShowDialog() == DialogResult.OK)
            //MessageBox.Show("Save Dialog launched");
            excelWorkbook.SaveAs(saver.FileName, Type.Missing, Type.Missing,Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing);

Большое спасибо, Джордж


person George    schedule 03.03.2010    source источник


Ответы (2)


IIRC вам необходимо установить OwnerWndProc быть главным окном приложения Excel.

person Community    schedule 03.03.2010
comment
Хорошо, спасибо, я посмотрю, смогу ли я найти пример использования Thin в C #. ;-) - person George; 03.03.2010

Хакерское, но рабочее решение:

        saver.FileName = "test";
        saver.DefaultExt = "xls";
        saver.Filter = "Microsoft Office Excel Workbook |(*.xls*)";
        saver.CheckFileExists = false;
        saver.InitialDirectory = "c:\\George";
        Form dummyForm = new System.Windows.Forms.Form();
    if (saver.ShowDialog(dummyForm) == DialogResult.OK)
        //MessageBox.Show("Save Dialog launched");
        excelWorkbook.SaveAs(saver.FileName, Type.Missing, Type.Missing,Type.Missing,
        Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing);

Все, что я сделал, это создал новую фиктивную форму и добавил к ней ваш SaveFileDialogue. Вы могли бы попробовать сделать владельца своей реальной формой, но подумали, что это наиболее вероятное решение вашей проблемы в краткосрочной перспективе.

person Faraday    schedule 04.06.2012