C # Windows Forms cuadro de diálogo Imprimir haga clic en Aceptar dos veces para responder

StackOverflow https://stackoverflow.com/questions/2648977

  •  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.

¿Fue útil?

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:

  1. En toolstrip1_Click:

    private void toolStrip1_Click(object sender, EventArgs e)
    {
      this.Validate();
    }
    
  2. 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top