C # Диалоговое окно печати Windows Forms дважды нажмите кнопку ОК, чтобы ответить - PullRequest
4 голосов
/ 16 апреля 2010

Я использую Visual Studio 2008, .net Framework 3.5 для клиент-серверного приложения Windows Forms, над которым я работаю. При запуске программы и попытке ее печати возникает странная ошибка. Откроется диалоговое окно печати, но мне нужно дважды нажать кнопку ОК, чтобы оно заработало. После второго клика все работает нормально, ошибок нет. Когда я ставлю точку останова: if (result == DialogResult.OK), точка останова не срабатывает до второго щелчка. Вот код:

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();
        }
        ...

Это сводит меня с ума, и я не вижу ничего другого, что могло бы помешать этому.

Ответы [ 3 ]

1 голос
/ 08 мая 2012

Я сталкивался с этим, имея «нераспознанный первый клик на инструменте», используя OpenFileDialog в C # / WinForms. После долгих ругательств и поисков, я сделал это:

  1. В toolstrip1_Click:

    private void toolStrip1_Click(object sender, EventArgs e)
    {
      this.Validate();
    }
    
  2. В функции, которая использует вызовы 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);
        }
      }
    }
    

Две вещи кажутся ключевыми:

  • Когда OpenFileDialog закрывается, фокус необходимо сбросить на главное окно (EditorForm.ActiveForm.TopLevelControl.Focus();)
  • Когда нажата кнопка панели инструментов, панель инструментов подтверждает себя (this.Validate()) и распознает событие мыши.
1 голос
/ 24 июня 2017

Я достиг этого, используя таймер.

Перетащите таймер на форму, содержащую полосу инструментов, и превратите его в таймер с одним выстрелом с задержкой, скажем, 1 мс Примечание. Для таймера изначально должно быть установлено значение «Включено» на «Ложь»

private void toolStripBtnPrint_Click(object sender, EventArgs e)
{
   timer1.Interval = 1; // 1ms
   timer1.Enabled = true;
}

Создание обработчика событий отметки таймера

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
    }
}

Это может быть грязно, но это вытащило меня из ямы. НТН

0 голосов
/ 16 апреля 2010
...