作成日: 2022/02/04 最終更新日: 2022/02/04
文書種別
使用方法
詳細
C1ToolBarにC1Commandを追加し、下記コードのようにそのクリックイベントで印刷ダイアログを表示し印刷する場合、ダイアログの印刷ボタンをクリックしても、1回目は印刷が開始しないことがあります。
◎サンプルコード(VB)
これは、C1CommandのClickイベントで印刷ダイアログを開いた場合このダイアログにフォーカスが移動しないためで、初回のクリックでフォーカスを得て、2回目のクックで印刷が開始します。
この動作を改善し、1回目のクリックで印刷を開始させるために、以下の2通りの方法が考えられます。
(1)PrintDialogのUseEXDialogをFalseに設定する
上述のコードにおいて、ShowDialogを実行する前に下記コードを追加します。
◎サンプルコード(VB)
※この設定を行うと、印刷ダイアログの形状がWindows XPスタイルからそれ以降のスタイルに変わります。
(2)タイマーを使用して印刷ダイアログの開始を遅らせる
以下のようなコードでタイマーの起動/停止を行った後、印刷ダイアログを表示します。
◎サンプルコード(VB)
◎サンプルコード(VB)
Private Sub C1Command1_Click(sender As Object, e As C1.Win.C1Command.ClickEventArgs) Handles C1Command1.Click
PrintDialog1.Document = PrintDocument1
If (PrintDialog1.ShowDialog(Me) = DialogResult.OK) Then
PrintDocument1.Print()
End If
End Sub
◎サンプルコード(C#)
private void c1Command1_Click(object sender, C1.Win.C1Command.ClickEventArgs e)
{
printDialog1.Document = printDocument1;
if (printDialog1.ShowDialog(this) == DialogResult.OK)
printDocument1.Print();
}
これは、C1CommandのClickイベントで印刷ダイアログを開いた場合このダイアログにフォーカスが移動しないためで、初回のクリックでフォーカスを得て、2回目のクックで印刷が開始します。
この動作を改善し、1回目のクリックで印刷を開始させるために、以下の2通りの方法が考えられます。
(1)PrintDialogのUseEXDialogをFalseに設定する
上述のコードにおいて、ShowDialogを実行する前に下記コードを追加します。
◎サンプルコード(VB)
PrintDialog1.UseEXDialog = False
◎サンプルコード(C#)
printDialog1.UseEXDialog = false;
※この設定を行うと、印刷ダイアログの形状がWindows XPスタイルからそれ以降のスタイルに変わります。
(2)タイマーを使用して印刷ダイアログの開始を遅らせる
以下のようなコードでタイマーの起動/停止を行った後、印刷ダイアログを表示します。
◎サンプルコード(VB)
Public Class Form1
Dim Timer1 As Timer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1 = New Timer
Timer1.Interval = 10
AddHandler Timer1.Tick, AddressOf Timer_Tick
End Sub
Private Sub C1Command1_Click(sender As Object, e As C1.Win.C1Command.ClickEventArgs) Handles C1Command1.Click
Timer1.Start()
End Sub
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
OpenPrintDialog
End Sub
Public Sub OpenPrintDialog()
Timer1.Stop()
PrintDialog1.Document = PrintDocument1
If (PrintDialog1.ShowDialog(Me) = DialogResult.OK) Then
PrintDocument1.Print()
End If
End Sub
End Class
◎サンプルコード(C#)
public partial class Form1 : Form
{
Timer timer;
public Form1()
{
InitializeComponent();
timer = new Timer();
timer.Interval = 10;
timer.Tick += Timer_Tick;
}
private void c1Command1_Click(object sender, C1.Win.C1Command.ClickEventArgs e)
{
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
OpenPrintDialog();
}
public void OpenPrintDialog()
{
timer.Stop();
printDialog1.Document = printDocument1;
if (printDialog1.ShowDialog(this) == DialogResult.OK)
printDocument1.Print();
}
}