C#Windows窗体打印对话框单击“确定”两次以响应
我正在使用Visual Studio 2008、.net Framework 3.5作为我正在开发的Windows窗体客户端服务器应用程序。当我运行程序并尝试打印时,出现了一个奇怪的错误。“打印”对话框打开,但我必须单击“确定”按钮两次,它才能工作。第二次单击后,工作正常,没有错误。当我在:if(result==DialogResult.OK)上放置断点时,断点直到第二次单击才触发。代码如下:C#Windows窗体打印对话框单击“确定”两次以响应,c#,printing,printdialog,C#,Printing,Printdialog,我正在使用Visual Studio 2008、.net Framework 3.5作为我正在开发的Windows窗体客户端服务器应用程序。当我运行程序并尝试打印时,出现了一个奇怪的错误。“打印”对话框打开,但我必须单击“确定”按钮两次,它才能工作。第二次单击后,工作正常,没有错误。当我在:if(result==DialogResult.OK)上放置断点时,断点直到第二次单击才触发。代码如下: private void tbPrint_Click(object sender, EventArgs
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();
}
...
这让我抓狂,我看不到任何其他会干扰它的东西。也许这是一个类似于此的问题:我在使用C#/WinForms中的
OpenFileDialog
时遇到了这个问题。经过多次咒骂和谷歌搜索,我做到了:
private void toolStrip1\u单击(对象发送方,事件参数e)
{
这个。Validate();
}
private void locateMappingToolStripMenuItem\u单击(对象发送方,事件参数e)
{
OpenFileDialog dg=new System.Windows.Forms.OpenFileDialog();
如果(dg.ShowDialog()==DialogResult.OK)
{
fileLocation=Path.GetDirectoryName(dg.FileName);
尝试
{
if(LoadData())
{
//启用工具栏按钮
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();
}
}
捕获(异常exx)
{
MessageBox.Show(exx.Message+Environment.NewLine+exx.InnerException);
}
}
}
- 当
关闭时,需要将焦点重置到主窗口(OpenFileDialog
)EditorForm.ActiveForm.TopLevelControl.focus();
- 单击toolstrip按钮时,toolstrip将验证自身(
)并识别鼠标事件this.Validate()
- 我是用定时器实现的
在包含toolstrip的窗体上放置一个计时器,并将其转换为一次触发计时器,延迟为1mS。注意:计时器最初必须将“Enabled”设置为“False”
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当打印对话框应将结果作为DialogResult发送时,您能否向我们显示打印对话框中的代码。好吗?似乎就是这样。当我使用常规按钮而不是toolstrip按钮时,它只需单击一下即可工作!以下是toolstrip和printdialog问题的修复方法:。它在理论上修复了问题,但您无法从printdialog返回DialogResult,因此它不是一个实际的修复方法。您可以将任何需要的结果包装到委托调用的方法中。就我而言,同样的问题很简单:我有一个ToolStripMenuItem用于此功能,所以我只是通过ToolStripButton的委托触发了ToolStripMenuItem(单击:)