Определение размера отчета о доступе, открытого как acDialog, а главное окно скрыто - PullRequest
0 голосов
/ 19 ноября 2018

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

Я получаю отдельное окно, открывая форму или отчет с помощью acDialog.Всплывающая форма также вызвала отдельное окно, но всплывающий отчет этого не сделал.

Формы работают отлично, но я не могу отобразить отчеты, пока я не выполню DoCmd.Maximize in Report_Open .

При максимизации отчет занимает весь экран, что не идеально.Я хочу установить размер отчета по своему выбору, но как встроенная команда Access DoCmd.MoveSize , так и Windows API SetWindowPos приводят к тому, что отчет возвращается в главное окно доступа, чтоскрыт.

Я надеюсь, что кто-то может предложить способ достижения моей цели.

C # код:

class Program
{
    private static readonly string DbLocation = "C:\\example.accdb";

    [DllImport("user32.dll")]
    private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
    private const int KeyDownEvent = 0x0000;
    private const int KeyUpEvent = 0x0002;

    static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo()
        {
            FileName = GetOfficeAppPath("Access.Application", "msaccess.exe"),
            Arguments = DbLocation,
            WindowStyle = ProcessWindowStyle.Hidden
        };

        // Simulate holding the Shift key, while opening the application, to bypass startup proceedings.
        keybd_event((byte)Keys.LShiftKey, 0, KeyDownEvent, 0);
        Process process = Process.Start(startInfo);
        process.WaitForInputIdle();
        keybd_event((byte)Keys.LShiftKey, 0, KeyUpEvent, 0);

        Access.Application exampleApp = (Access.Application)Marshal.BindToMoniker(DbLocation);

        try
        {
            exampleApp.Run("OpenReport", 12345);
        }
        catch (Exception e)
        {
            MessageBox.Show($"{e.Message}\n{e.InnerException?.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            exampleApp.CloseCurrentDatabase();
            process.Kill();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...