+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

LL24: Preview-Fenster nicht modal öffnen

print

(Matthias Keller) #1

Hallo zusammen,

Wenn ich List&Label über einen Aufruf via .Print() aus einer WPF-Applikation aufrufe, wird das Fenster (egal ob Designer oder Preview) immer modal, also forciert im Vordergrund angezeigt.

Ich benötige aber eine Möglichkeit, mein aufrufendes Programm in dieser Zeit weiter zu bedienen. Ich habe versucht, L&L mithilfe von Task.Run zu starten, was aber zu AccessViolationExceptions führt.
Die Verwendung des WPF-Preview Controls ist auch keine Lösung, da dafür zuerst die vollständige Preview-Datei generiert werden muss, was bei mehreren hundert Reportseiten zu lange dauert.

Gibt es eine Möglichkeit, zumindest das Previewfenster nicht modal zu starten, sodass das aufrufende Programm weiterhin auf Input reagieren kann?

Danke im Voraus und Gruss
Matthias


(Günther Schwarze) #2

Die ListLabel-Komponente hat eine Eigenschaft ParentHandle. Wenn die ungleich IntPtr.Zero ist, wird das darin vermutete Fenster als Parent genommen. Vielleicht also einfach mal “1” übergeben und schauen was passiert? Solange der Druck nicht in einem eigenen Thread läuft wirst Du Dein Programm aber nicht nebenher bedienen können, zumindest wird das nicht schön aussehen.

Du könntest - unabhängig von der Frage - mal das EnhancedPreviewControl für WPF probieren, das kann die Vorschau auch während des Drucks anzeigen. Ist zwar nur ein gewrapptes WinForms-Control, aber vielleicht immer noch schöner als ein Fenster das aufplöppt.


(combit - Jochen Bartlau) #3

Ich habe mir das eben auch angesehen. In einer WPF-Anwendung konnte ich mit diesem Code

Task.Factory.StartNew(() => {
    using (ListLabel LL = new ListLabel())
    {
        LL.DataSource = CreateDataSource();
        LL.AutoShowSelectFile = false;
        LL.AutoShowPrintOptions = false;
        LL.PreviewControl = enhancedPreviewControl.PreviewControl;
        LL.AutoDestination = LlPrintMode.PreviewControl;                   
        LL.Print(LlProject.List, @"c:\temp\test.lst");
    }
});

tatsächlich eine AccessViolationException provozieren. Das Problem ist seit eben erledigt, Sie können sich gerne beim Support melden, wenn Sie eine angepasste Version benötigen.

Der Vollständigkeit halber anbei mein (sehr einfaches :wink:) Testprojekt: TaskTestApp.zip (8.5 KB)