4

作業中のWindowsフォームクライアントサーバーアプリにVisualStudio2008、.netFramework3.5を使用しています。プログラムを実行して印刷しようとすると、奇妙なバグが発生します。印刷ダイアログボックスが開きますが、機能させるには[OK]ボタンを2回クリックする必要があります。2回目のクリック後は正常に動作し、エラーは発生しません。ブレークポイントを設定すると:if(result == DialogResult.OK)、ブレークポイントは2回目のクリックまでトリガーされません。コードは次のとおりです。

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

これは私を夢中にさせています、そして私はそれを妨げるものを他に見ることができません。

4

3 に答える 3

1

OpenFileDialogC#/ 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);
        }
      }
    }
    

2つの線が重要であるように思われます:

  • 閉じたらOpenFileDialog、フォーカスをメインウィンドウにリセットする必要があります(EditorForm.ActiveForm.TopLevelControl.Focus();
  • ツールストリップボタンがクリックされると、ツールストリップはそれ自体を検証し(this.Validate())、マウスイベントを認識します。
于 2012-05-08T05:38:11.720 に答える
1

私はタイマーを使ってそれを達成しました。

ツールストリップを含むフォームにタイマーをドロップし、たとえば1mSの遅延でワンショットタイマーに変換します。注:タイマーでは、最初に「有効」を「偽」に設定する必要があります

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

汚れているかもしれませんが、穴から抜け出しました。HTH

于 2017-06-24T17:17:46.817 に答える
0

多分それはこれに似た問題です:http ://social.msdn.microsoft.com/Forums/en-US/winforms/thread/681a50b4-4ae3-407a-a747-87fb3eb427fd

于 2010-04-15T21:13:00.920 に答える