2009-10-08 7 views
1

J'ai un programme où je peux basculer entre différentes dispositions dans mon document d'impression (dessins graphiques de taille A4, A5 ou A6 et autres.) Le document d'impression est toujours de taille A4). Je peux montrer ce document dans un PrintPreviewDialog mais je dois spécifier manuellement dans le code avant main quelle disposition je veux voir.Comment ajouter un nouveau bouton à PrintPreviewDialog en C#?

Je souhaite ajouter un nouveau bouton à la barre d'outils PrintPreviewDialog qui me permet de basculer simplement entre ces différentes dispositions.

Ne vous inquiétez pas de la fonction du bouton, je veux juste l'obtenir là-haut et connecté à n'importe quelle méthode (que je vais coder moi-même). À votre santé!

Répondre

0

Avez-vous essayé de créer une nouvelle classe et d'hériter de PrintPreviewDialog?

1

Vous pouvez toujours créer le vôtre. Ajouter le PrintPreviewControl à votre formulaire avec tous les boutons que vous voulez/besoin. Définissez ensuite la propriété Document sur le contrôle pour être l'objet imprimable souhaité.

Éditer> Cela fonctionne plutôt bien. J'ai fait ceci, parce que j'ai ajouté quelques contrôles de Microsoft.Ink au formulaire (pour permettre de signer le document aperçu). Ensuite, je viens d'appeler ppcDocument.RefreshPreview();

0

Encore une fois.

J'ai vu des morceaux de code «élaborés» sur le Web qui utilisent PrintPreviewControl. Quelques centaines de lignes de code ou plus.

Ils utilisent également tous la forme. Je ne veux pas ça. Je sais que PrintPreviewDialog en utilise un certain niveau, mais je ne veux pas avoir un fichier Form ou écrire dans un corps Form dans mon code.

N'y a-t-il aucun moyen rapide d'hériter de PrintPreviewDialog ou de configurer un PrintPreviewControl qui me permet d'ajouter un nouveau bouton sans impliquer un corps/fichier Form?

2

Eh bien, je pense que j'ai réussi à le faire. Voici l'inspiration: davidjt52 @ bytes.com

Voici le code que je fini par écrire (cette classe est appelée quand je veux prévisualiser mon document ailleurs dans l'ensemble du programme):

using System.Reflection; //FieldInfo 

public class MyPrintPreviewDialog: PrintPreviewDialog { private ToolStripButton myTestButton;

public MyPrintPreviewDialog() : base() 
{ 
    Type T = typeof(PrintPreviewDialog); 
    FieldInfo fi = T.GetField("toolStrip1", BindingFlags.Instance | 
    BindingFlags.NonPublic); 
    ToolStrip toolStrip1 = (ToolStrip)fi.GetValue(this); 

    myTestButton = new ToolStripButton(); 
    myTestButton.ToolTipText = "TEST"; 
    myTestButton.ImageIndex = 0; 
    myTestButton.Click += new EventHandler(Btn_Click); 

    Button Btn = new Button(); 
    toolStrip1.Items.Add(myTestButton); 
} 

private void Btn_Click(object Sender, EventArgs args) 
{ 
    MessageBox.Show("Button Clicked"); 
} 

}

Merci pour votre aide. :)

Correction: I savoir J'ai réussi à le faire.

Questions connexes