C # Windows Forms cuadro de diálogo Imprimir haga clic en Aceptar dos veces para responder
-
27-09-2019 - |
Pregunta
Estoy usando Visual Studio 2008, .NET Framework 3.5 para una aplicación de formularios de cliente-servidor de Windows que estoy trabajando. Hay un error raro cuando ejecuto el programa y tratar de imprimir. Se abre el cuadro de diálogo de impresión, pero tengo que hacer clic en el botón Aceptar dos veces para que funcione. Después de la segunda posición funciona bien, sin errores. Cuando pongo un punto de interrupción en: if (resultado == DialogResult.OK), el punto de interrupción no lo hace gatillo hasta la segunda posición. Aquí está el código:
private void tbPrint_Click(object sender, EventArgs e)
{
try
{
printDialog1.Document = pDoc;
DialogResult result = printDialog1.ShowDialog();
if (result == DialogResult.OK)
{
pDoc.PrinterSettings.PrinterName = printDialog1.PrinterSettings.PrinterName;
pDoc.Print();
}
...
Esto me está volviendo loco, y no puedo ver nada más que pudiera interferir con él.
Solución
Tal vez se trata de un problema similar a este: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/681a50b4-4ae3-407a-a747-87fb3eb427fd
Otros consejos
Me encontré con este mientras que el "primer clic toolstrip no reconocido" por medio de un OpenFileDialog
en C # / WinForms. Después de mucho maldición y buscando en Google, hice esto:
-
En
toolstrip1_Click
:private void toolStrip1_Click(object sender, EventArgs e) { this.Validate(); }
-
En la función que utiliza llamadas
OpenFileDialog
:private void locateMappingToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dg = new System.Windows.Forms.OpenFileDialog(); if (dg.ShowDialog() == DialogResult.OK) { fileLocation = Path.GetDirectoryName(dg.FileName); try { if (LoadData()) { //Enable toolbar buttons toolStripButton3.Enabled = true; toolStripButton5.Enabled = true; toolStripButton1.Enabled = true; toolStripButton2.Enabled = true; searchParm.Enabled = true; toolStripButton4.Enabled = true; toolStripButton6.Enabled = true; exitToolStripMenuItem.Enabled = true; EditorForm.ActiveForm.TopLevelControl.Focus(); } } catch (Exception exx) { MessageBox.Show(exx.Message + Environment.NewLine + exx.InnerException); } } }
Dos cosas líneas parecen ser clave:
- Cuando se cierra el
OpenFileDialog
, el enfoque necesita ser restablecida a la ventana principal (EditorForm.ActiveForm.TopLevelControl.Focus();
) - Cuando se hace clic en el botón toolstrip, la toolstrip valida en sí (
this.Validate()
) y reconoce el evento de ratón.
Me lo logró mediante un temporizador.
Excluir un temporizador en el formulario que contiene el toolstrip y convertirlo en un temporizador de un disparo con un retraso de 1 ms decir. Nota: El temporizador debe tener inicialmente 'Enabled' ajustado a 'falso'
private void toolStripBtnPrint_Click(object sender, EventArgs e)
{
timer1.Interval = 1; // 1ms
timer1.Enabled = true;
}
Crear un controlador de eventos de pulsos del temporizador
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
PrintDialog printDialogue=new PrintDocument();
//Do your initialising here
if(DialogResult.OK == printDialogue.ShowDialog())
{
//Do your stuff here
}
}
Puede ser sucia, pero me sacó de un agujero. HTH