private HistoryData _historyData; // null == 作成未完了 private MkAndPrintWin(ProblemInfo problemInfo, int level, HistoryData historyData) { _problemInfo = problemInfo; _level = level; _historyData = historyData; InitializeComponent(); this.lblProblemTitle.Text = "印刷する問題:" + _problemInfo.getName() + " , 難易度:" + Utils.levelToString(_level); this.lblMkStatus.Text = "作成中..."; this.cmbPrinterName.Items.Clear(); foreach (string name in ImagePrinter.getPrinterNames()) { this.cmbPrinterName.Items.Add(name); } this.cmbPrinterName.SelectedIndex = 0; this.cmbPaperSizeName.Items.Clear(); foreach (string name in ImagePrinter.getPaperSizeNames()) { this.cmbPaperSizeName.Items.Add(name); } this.cmbPaperSizeName.SelectedIndex = 0; // 前回のプリンタ選択を復元 { string name = Gnd.i.lastPrinterName; if (name != "") { int index = Utils.getIndex(cmbPrinterName, name); if (index != -1) { cmbPrinterName.SelectedIndex = index; cbUseDefaultPrinter.Checked = false; } } } // 前回の用紙サイズ選択を復元 { string name = Gnd.i.lastPaperSizeName; if (name != "") { int index = Utils.getIndex(cmbPaperSizeName, name); if (index != -1) { cmbPaperSizeName.SelectedIndex = index; cbUseDefaultPaperSize.Checked = false; } } } // 前回のマージンを復元 { LTRB margin = Gnd.i.lastMargin; if (margin != null) { marginL.Text = "" + margin.l; marginT.Text = "" + margin.t; marginR.Text = "" + margin.r; marginB.Text = "" + margin.b; cbUseDefaultMargin.Checked = false; } else { marginL.Text = "" + 100; marginT.Text = "" + 100; marginR.Text = "" + 100; marginB.Text = "" + 100; } } cbPrintProblem.Checked = Gnd.i.lastPrintProblem; cbPrintAnswer.Checked = Gnd.i.lastPrintAnswer; refreshUI(); if (_historyData != null) { historyDataCreated(); } }
private void btnMkAndPrint_Click(object sender, EventArgs e) { this.mtEnabled = false; this.Visible = false; Gnd.i.mkAndPrintWinParentWin.Visible = false; try { CancellableBusyDlg.perform(false, delegate { if (_historyData == null) // ? 作成未完了 { if (Gnd.i.mkSudokuProc == null) { throw null; } Gnd.i.cancellableBusyDlg.setTitle("ナンプレを作成しています... (印刷は自動的に開始されます)"); while (Gnd.i.mkSudokuProc.isEnded() == false) { if (Gnd.i.cancelled) { Gnd.i.cancellableBusyDlg.setTitle("キャンセルしています..."); Gnd.i.mkSudokuProc.bCancel(); throw new Cancelled(); } Thread.Sleep(2000); } Gnd.i.cancellableBusyDlg.setTitle("作成した問題を画像に変換しています..."); _historyData = Gnd.i.mkSudokuProc.getResult(); //historyDataCreated(); // もうこのフォームを表示しないので、呼ばなくて良い。 if (Gnd.i.cancelled) { throw new Cancelled(); } } Gnd.i.cancellableBusyDlg.setTitle("ナンプレを印刷しています..."); { ImagePrinter imgPrn = new ImagePrinter(); if (this.cbUseDefaultMargin.Checked == false) { imgPrn.setMargin(getMaringLTRB()); } if (this.cbUseDefaultPrinter.Checked == false) { imgPrn.setPrinterName(this.cmbPrinterName.SelectedItem.ToString()); } if (this.cbUseDefaultPaperSize.Checked == false) { imgPrn.setPaperSizeName(this.cmbPaperSizeName.SelectedItem.ToString()); } if (this.cbPrintProblem.Checked) { imgPrn.addImage(_historyData.getProblemImage()); } if (this.cbPrintAnswer.Checked) { imgPrn.addImage(_historyData.getAnswerImage()); } imgPrn.doPrint(); } throw new Completed("印刷しました。"); }); } catch (Exception ex) { FaultOperation.caught(ex); } Gnd.i.mkAndPrintWinParentWin.Visible = true; //this.Visible = true; this.Close(); }