2010-12-07 6 views
1

J'utilise PrintDialog dans mon application de bureau. Quand il est appelé à partir du bouton ou du menu contextuel, il fonctionne correctement. Mais lorsque je clique sur le bouton d'infobulle pour appeler le PrintDialog, malgré le fait que la fenêtre printdialog est active, je ne me concentre pas sur le bouton d'impression. Je dois cliquer deux fois pour obtenir l'impression.Print Dialog Focus Issue

La solution que j'ai eu est d'utiliser BeginInvoke avec délégué pour appeler async et maintenant je suis en mesure d'obtenir le focus avec le code suivant.

ShowThePrintDialog printD = nouveau ShowThePrintDialog (p.ShowDialog); this.BeginInvoke (printD);

Je veux capturer le DialogResult et poursuivre en fonction du bouton cliqué sur printdialog.

Quelqu'un peut-il me donner une idée de la façon de capturer le DialogResult lors de l'utilisation de BeginInvoke?

Raman

Répondre

1

Le PrintDialog ne reçoit pas l'attention, car les toolstripbuttons Click-événement ne se termine pas. Cela peut être résolu en utilisant une minuterie:

private void toolStripButtonPrint1_Click(object sender, EventArgs e) 
{ 
    timerPrint1.Start(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    timerPrint1.Stop(); 
    if (printDialog1.ShowDialog() == DialogResult.OK) 
    { 
     // do your stuf 
    } 
}