/// <summary> /// XML出力ボタンの処理関数 /// </summary> /// <param name="sender">イベントを送信したオブジェクト</param> /// <param name="e">イベント引数</param> private void btnWriteXml_Click(object sender, EventArgs e) { saveFileDialog.FileName = ""; saveFileDialog.Filter = "XMLファイル(*.xml)|*.xml"; if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // ダイアログで指定したパス名を取得する string filePath = saveFileDialog.FileName; // 保存するファイル名の拡張子がXMLではない場合、処理を中止する if (Path.GetExtension(filePath) != ".xml") { MessageBox.Show("XMLファイル形式で保存してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // メッセージボックスのための変数を宣言する string msg = ""; string title = ""; MessageBoxIcon icon = new MessageBoxIcon(); // 当選者グループのインスタンス生成 WinnerGroup winners = new WinnerGroup(wonFirst, wonSecond, wonThird, wonFourth, wonFifth);; FileHandler export = new FileHandler(filePath, winners); // XMLで保存する try { export.writeXml(); msg = "XML出力が完了しました。"; title = "XML出力完了"; icon = MessageBoxIcon.None; } catch (IOException) // 保存しようとするファイル名と同じ名前を持っているファイルが開いている際の例外 { msg = "出力しようとするXMLファイルが開いている状態です。ファイルを閉めてからもう一度試行ってください。"; title = "エラー"; icon = MessageBoxIcon.Error; } catch // その他の例外 { msg = "XML出力に問題が発生しました。"; title = "エラー"; icon = MessageBoxIcon.Error; } finally { MessageBox.Show(msg, title, MessageBoxButtons.OK, icon); } } }
/// <summary> /// 抽選クラスのコンストラクタ /// </summary> /// <param name="all">応募者全員のグループ</param> /// <param name="black">ブラックリストのグループ</param> /// <param name="white">ホワイトリストのグループ</param> /// <param name="winnerGroup">各順位グループの集まり</param> /// <param name="selectedFile">抽選対象者ファイルのパスが含まれるテキストボックス</param> /// <param name="selectedBlack">ブラックリストファイルのパスが含まれるテキストボックス</param> /// <param name="selectedWhite">ホワイトリストファイルのパスが含まれるテキストボックス</param> /// <param name="sumTotal">人数配分の入力欄に入った数値の合計</param> /// <param name="isChecked">重複のフラグ</param> public Lottery(Group all, Group black, Group white, WinnerGroup winnerGroup, TextBox selectedFile, TextBox selectedBlack, TextBox selectedWhite, int sumTotal, Boolean isChecked) { this.all = all; this.black = black; this.white = white; this.winners = winnerGroup.groupsList; this.selectedFile = selectedFile; this.selectedBlack = selectedBlack; this.selectedWhite = selectedWhite; this.sumTotal = sumTotal; this.isChecked = isChecked; }
/// <summary> /// 抽選ボタンの処理関数 /// </summary> /// <param name="sender">イベントを送信したオブジェクト</param> /// <param name="e">イベント引数</param> async private void btnLotteryStart_Click(object sender, EventArgs e) { // CSVファイルを参照したかチェック if (selectedFile.Text.Equals("")) { MessageBox.Show("対象CSVファイルを選択してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 等級別の人数が全部空欄または0の場合 if ((txtFifth.Text.Equals("")) && (txtFourth.Text.Equals("")) && (txtThird.Text.Equals("")) && (txtSecond.Text.Equals("")) && (txtFirst.Text.Equals("")) || (txtFifth.Text.Equals("0")) && (txtFourth.Text.Equals("0")) && (txtThird.Text.Equals("0")) && (txtSecond.Text.Equals("0")) && (txtFirst.Text.Equals("0"))) { MessageBox.Show("抽選する人数を設定してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 等あたりの人数が空欄の場合の補正 blankToZero(txtFifth); blankToZero(txtFourth); blankToZero(txtThird); blankToZero(txtSecond); blankToZero(txtFirst); // 全角数字が入力された場合、半角数字で変換する fullWidthToHalfWidth(txtFifth); fullWidthToHalfWidth(txtFourth); fullWidthToHalfWidth(txtThird); fullWidthToHalfWidth(txtSecond); fullWidthToHalfWidth(txtFirst); // 重複フラグに重複可否の値を入れる isChecked = duplicateCheckbox.Checked; // 等級別の人数を取得する int fifthNum = Int16.Parse(txtFifth.Text); int fourthNum = Int16.Parse(txtFourth.Text); int thirdNum = Int16.Parse(txtThird.Text); int secondNum = Int16.Parse(txtSecond.Text); int firstNum = Int16.Parse(txtFirst.Text); int sumTotal = fifthNum + fourthNum + thirdNum + secondNum + firstNum; // 等級別の人数合計がCSVファイル内のデータ件数を超える場合の処理(重複不可のみ) if (isChecked == false && (sumTotal > csvDataTotal)) { MessageBox.Show("当選可能人数の合計が全体の応募者人数を超えました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 抽選のためのグループリストのインスタンスを生成する all = new Group(); black = new Group(); white = new Group(); wonFirst = new Group(1, firstNum, listView1); wonSecond = new Group(2, secondNum, listView2); wonThird = new Group(3, thirdNum, listView3); wonFourth = new Group(4, fourthNum, listView4); wonFifth = new Group(5, fifthNum, listView5); // 当選者グループの集まりを生成する WinnerGroup winners = new WinnerGroup(wonFirst, wonSecond, wonThird, wonFourth, wonFifth); // 抽選クラスの生成 Lottery lottery = new Lottery(all, white, black, winners, selectedFile, selectedBlack, selectedWhite, sumTotal, isChecked); // 抽選を行う try { setOffUIComponent(); await lottery.doLottery(); } catch (ArgumentOutOfRangeException) { MessageBox.Show("エラーが発生しました。もう一度行ってください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception) { MessageBox.Show("ブラックリストとホワイトリスト内に共通的なデータがあります。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } // 抽選終了後にCSV出力ボタンとリセットボタンは表示し、抽選ボタンは非表示にする toggleUIComponent(false); }
/// <summary> /// コンストラクタ2 /// </summary> /// <param name="filePath">ファイルのパス名</param> /// <param name="winnerGroup">当選者グループの集まり</param> public FileHandler(string filePath, WinnerGroup winnerGroup) { this.filePath = filePath; this.winner = winnerGroup.groupsList; }