diff --git a/LottoPicker/LottoPicker/App.config b/LottoPicker/LottoPicker/App.config index 8e15646..4bfa005 100644 --- a/LottoPicker/LottoPicker/App.config +++ b/LottoPicker/LottoPicker/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/LottoPicker/LottoPicker/CustomControl/BallSelectControl.cs b/LottoPicker/LottoPicker/CustomControl/BallSelectControl.cs index 59a47c3..9015d68 100644 --- a/LottoPicker/LottoPicker/CustomControl/BallSelectControl.cs +++ b/LottoPicker/LottoPicker/CustomControl/BallSelectControl.cs @@ -34,5 +34,22 @@ namespace LottoPicker.CustomControl ctrBall.Visible = true; } + + public int Pick(List alreadySelected) + { + int index = cboType.SelectedIndex; + ctrBall.BallColor = Utils.Palettes[index]; + + int num = Utils.GetNumber(index); + while (alreadySelected.Contains(num)) + { + num = Utils.GetNumber(index); + } + + ctrBall.BallNumber = num.ToString(); + ctrBall.Visible = true; + + return num; + } } } diff --git a/LottoPicker/LottoPicker/Dialog/HistoryDialog.Designer.cs b/LottoPicker/LottoPicker/Dialog/HistoryDialog.Designer.cs new file mode 100644 index 0000000..a6dca52 --- /dev/null +++ b/LottoPicker/LottoPicker/Dialog/HistoryDialog.Designer.cs @@ -0,0 +1,163 @@ +namespace LottoPicker.Dialog +{ + partial class HistoryDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HistoryDialog)); + this.txtStartNum = new System.Windows.Forms.TextBox(); + this.txtEndNum = new System.Windows.Forms.TextBox(); + this.btnStart = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.txtResult = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // txtStartNum + // + this.txtStartNum.Location = new System.Drawing.Point(60, 19); + this.txtStartNum.Name = "txtStartNum"; + this.txtStartNum.Size = new System.Drawing.Size(100, 23); + this.txtStartNum.TabIndex = 0; + this.txtStartNum.Text = "1"; + this.txtStartNum.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // txtEndNum + // + this.txtEndNum.Location = new System.Drawing.Point(212, 19); + this.txtEndNum.Name = "txtEndNum"; + this.txtEndNum.Size = new System.Drawing.Size(100, 23); + this.txtEndNum.TabIndex = 0; + this.txtEndNum.Text = "20"; + this.txtEndNum.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(336, 19); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(75, 23); + this.btnStart.TabIndex = 1; + this.btnStart.Text = "Start"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(11, 23); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 15); + this.label1.TabIndex = 2; + this.label1.Text = "회차: "; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(178, 23); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(15, 15); + this.label2.TabIndex = 2; + this.label2.Text = "~"; + // + // txtResult + // + this.txtResult.BackColor = System.Drawing.Color.White; + this.txtResult.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtResult.Location = new System.Drawing.Point(3, 73); + this.txtResult.Multiline = true; + this.txtResult.Name = "txtResult"; + this.txtResult.ReadOnly = true; + this.txtResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtResult.Size = new System.Drawing.Size(419, 317); + this.txtResult.TabIndex = 3; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.txtResult, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(425, 393); + this.tableLayoutPanel1.TabIndex = 4; + // + // panel1 + // + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.txtStartNum); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.txtEndNum); + this.panel1.Controls.Add(this.btnStart); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(3, 3); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(419, 64); + this.panel1.TabIndex = 0; + // + // HistoryDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(425, 393); + this.Controls.Add(this.tableLayoutPanel1); + this.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.MaximumSize = new System.Drawing.Size(443, 1500); + this.MinimumSize = new System.Drawing.Size(443, 350); + this.Name = "HistoryDialog"; + this.Text = "History"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox txtStartNum; + private System.Windows.Forms.TextBox txtEndNum; + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtResult; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/LottoPicker/LottoPicker/Dialog/HistoryDialog.cs b/LottoPicker/LottoPicker/Dialog/HistoryDialog.cs new file mode 100644 index 0000000..181139b --- /dev/null +++ b/LottoPicker/LottoPicker/Dialog/HistoryDialog.cs @@ -0,0 +1,80 @@ +using LottoPicker.Utility; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LottoPicker.Dialog +{ + public partial class HistoryDialog : Form + { + public HistoryDialog() + { + InitializeComponent(); + } + + private void btnStart_Click(object sender, EventArgs e) + { + int start = int.Parse(txtStartNum.Text); + int end = int.Parse(txtEndNum.Text); + if (start > end) + { + int tmp = start; + start = end; + end = tmp; + } + + List history = new List(6 * (end - start + 1)); + for (int i = start; i <= end; i++) + { + history.AddRange(GetHistory(i)); + } + + history.Sort(); + Dictionary historyCount = new Dictionary(); + for (int i = 0; i < history.Count; i++) + { + string key = history[i].ToString(); + if (!historyCount.ContainsKey(key)) + historyCount.Add(key, 0); + + historyCount[key]++; + } + + PrintHistory(historyCount); + } + + private List GetHistory(int round) + { + List result = new List(6); + string url = $"http://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={round.ToString()}"; + JObject response = WebAPIUtil.CallRequest(url); + result.Add(int.Parse(response["drwtNo1"].ToString())); + result.Add(int.Parse(response["drwtNo2"].ToString())); + result.Add(int.Parse(response["drwtNo3"].ToString())); + result.Add(int.Parse(response["drwtNo4"].ToString())); + result.Add(int.Parse(response["drwtNo5"].ToString())); + result.Add(int.Parse(response["drwtNo6"].ToString())); + + return result; + } + + private void PrintHistory(Dictionary history) + { + StringBuilder stringBuilder = new StringBuilder(); + foreach (KeyValuePair pair in history) + { + string append = $"[{pair.Key}공] → {pair.Value}회"; + stringBuilder.AppendLine(append); + } + + txtResult.AppendText(stringBuilder.ToString()); + } + } +} diff --git a/LottoPicker/LottoPicker/Dialog/HistoryDialog.resx b/LottoPicker/LottoPicker/Dialog/HistoryDialog.resx new file mode 100644 index 0000000..868bc17 --- /dev/null +++ b/LottoPicker/LottoPicker/Dialog/HistoryDialog.resx @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + iv8P78wCc+AH79MAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/LottoPicker/LottoPicker/LottoPicker.csproj b/LottoPicker/LottoPicker/LottoPicker.csproj index df3bd2b..41646e5 100644 --- a/LottoPicker/LottoPicker/LottoPicker.csproj +++ b/LottoPicker/LottoPicker/LottoPicker.csproj @@ -8,9 +8,10 @@ WinExe LottoPicker LottoPicker - v4.5 + v4.8 512 true + AnyCPU @@ -35,6 +36,9 @@ lotto.ico + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + @@ -60,6 +64,12 @@ BallSelectControl.cs + + Form + + + HistoryDialog.cs + Form @@ -69,12 +79,16 @@ + BallControl.cs BallSelectControl.cs + + HistoryDialog.cs + MainForm.cs @@ -86,7 +100,9 @@ True Resources.resx + True + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/LottoPicker/LottoPicker/MainForm.Designer.cs b/LottoPicker/LottoPicker/MainForm.Designer.cs index 1eb22be..fd978a6 100644 --- a/LottoPicker/LottoPicker/MainForm.Designer.cs +++ b/LottoPicker/LottoPicker/MainForm.Designer.cs @@ -29,94 +29,45 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.btnGenerate = new System.Windows.Forms.Button(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.btnHistory = new System.Windows.Forms.Button(); this.ballSelectControl1 = new LottoPicker.CustomControl.BallSelectControl(); + this.ballSelectControl6 = new LottoPicker.CustomControl.BallSelectControl(); this.ballSelectControl2 = new LottoPicker.CustomControl.BallSelectControl(); + this.ballSelectControl5 = new LottoPicker.CustomControl.BallSelectControl(); this.ballSelectControl3 = new LottoPicker.CustomControl.BallSelectControl(); this.ballSelectControl4 = new LottoPicker.CustomControl.BallSelectControl(); - this.ballSelectControl5 = new LottoPicker.CustomControl.BallSelectControl(); - this.ballSelectControl6 = new LottoPicker.CustomControl.BallSelectControl(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.btnGenerate = new System.Windows.Forms.Button(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel1.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); this.SuspendLayout(); // - // ballSelectControl1 - // - this.ballSelectControl1.BackColor = System.Drawing.Color.White; - this.ballSelectControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.ballSelectControl1.Location = new System.Drawing.Point(4, 4); - this.ballSelectControl1.Name = "ballSelectControl1"; - this.ballSelectControl1.Size = new System.Drawing.Size(217, 269); - this.ballSelectControl1.TabIndex = 0; - // - // ballSelectControl2 - // - this.ballSelectControl2.BackColor = System.Drawing.Color.White; - this.ballSelectControl2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ballSelectControl2.Location = new System.Drawing.Point(228, 4); - this.ballSelectControl2.Name = "ballSelectControl2"; - this.ballSelectControl2.Size = new System.Drawing.Size(217, 269); - this.ballSelectControl2.TabIndex = 1; - // - // ballSelectControl3 - // - this.ballSelectControl3.BackColor = System.Drawing.Color.White; - this.ballSelectControl3.Dock = System.Windows.Forms.DockStyle.Fill; - this.ballSelectControl3.Location = new System.Drawing.Point(452, 4); - this.ballSelectControl3.Name = "ballSelectControl3"; - this.ballSelectControl3.Size = new System.Drawing.Size(217, 269); - this.ballSelectControl3.TabIndex = 2; - // - // ballSelectControl4 - // - this.ballSelectControl4.BackColor = System.Drawing.Color.White; - this.ballSelectControl4.Dock = System.Windows.Forms.DockStyle.Fill; - this.ballSelectControl4.Location = new System.Drawing.Point(676, 4); - this.ballSelectControl4.Name = "ballSelectControl4"; - this.ballSelectControl4.Size = new System.Drawing.Size(217, 269); - this.ballSelectControl4.TabIndex = 3; - // - // ballSelectControl5 - // - this.ballSelectControl5.BackColor = System.Drawing.Color.White; - this.ballSelectControl5.Dock = System.Windows.Forms.DockStyle.Fill; - this.ballSelectControl5.Location = new System.Drawing.Point(900, 4); - this.ballSelectControl5.Name = "ballSelectControl5"; - this.ballSelectControl5.Size = new System.Drawing.Size(217, 269); - this.ballSelectControl5.TabIndex = 4; - // - // ballSelectControl6 - // - this.ballSelectControl6.BackColor = System.Drawing.Color.White; - this.ballSelectControl6.Dock = System.Windows.Forms.DockStyle.Fill; - this.ballSelectControl6.Location = new System.Drawing.Point(1124, 4); - this.ballSelectControl6.Name = "ballSelectControl6"; - this.ballSelectControl6.Size = new System.Drawing.Size(223, 269); - this.ballSelectControl6.TabIndex = 5; - // // tableLayoutPanel1 // this.tableLayoutPanel1.ColumnCount = 1; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.btnGenerate, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.btnGenerate, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1357, 343); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1343, 307); this.tableLayoutPanel1.TabIndex = 3; // // btnGenerate // this.btnGenerate.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnGenerate.Location = new System.Drawing.Point(3, 286); + this.btnGenerate.Location = new System.Drawing.Point(3, 250); this.btnGenerate.Name = "btnGenerate"; - this.btnGenerate.Size = new System.Drawing.Size(1351, 54); + this.btnGenerate.Size = new System.Drawing.Size(1337, 54); this.btnGenerate.TabIndex = 3; this.btnGenerate.Text = "Generate"; this.btnGenerate.UseVisualStyleBackColor = true; @@ -139,19 +90,98 @@ this.tableLayoutPanel2.Controls.Add(this.ballSelectControl3, 2, 0); this.tableLayoutPanel2.Controls.Add(this.ballSelectControl4, 3, 0); this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 43); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; this.tableLayoutPanel2.RowCount = 1; this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(1351, 277); + this.tableLayoutPanel2.Size = new System.Drawing.Size(1337, 201); this.tableLayoutPanel2.TabIndex = 2; // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.btnHistory, 0, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(1337, 34); + this.tableLayoutPanel3.TabIndex = 4; + // + // btnHistory + // + this.btnHistory.Dock = System.Windows.Forms.DockStyle.Fill; + this.btnHistory.Location = new System.Drawing.Point(3, 3); + this.btnHistory.Name = "btnHistory"; + this.btnHistory.Size = new System.Drawing.Size(144, 28); + this.btnHistory.TabIndex = 0; + this.btnHistory.Text = "History"; + this.btnHistory.UseVisualStyleBackColor = true; + this.btnHistory.Click += new System.EventHandler(this.btnHistory_Click); + // + // ballSelectControl1 + // + this.ballSelectControl1.BackColor = System.Drawing.Color.White; + this.ballSelectControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ballSelectControl1.Location = new System.Drawing.Point(4, 4); + this.ballSelectControl1.Name = "ballSelectControl1"; + this.ballSelectControl1.Size = new System.Drawing.Size(215, 193); + this.ballSelectControl1.TabIndex = 0; + // + // ballSelectControl6 + // + this.ballSelectControl6.BackColor = System.Drawing.Color.White; + this.ballSelectControl6.Dock = System.Windows.Forms.DockStyle.Fill; + this.ballSelectControl6.Location = new System.Drawing.Point(1114, 4); + this.ballSelectControl6.Name = "ballSelectControl6"; + this.ballSelectControl6.Size = new System.Drawing.Size(219, 193); + this.ballSelectControl6.TabIndex = 5; + // + // ballSelectControl2 + // + this.ballSelectControl2.BackColor = System.Drawing.Color.White; + this.ballSelectControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ballSelectControl2.Location = new System.Drawing.Point(226, 4); + this.ballSelectControl2.Name = "ballSelectControl2"; + this.ballSelectControl2.Size = new System.Drawing.Size(215, 193); + this.ballSelectControl2.TabIndex = 1; + // + // ballSelectControl5 + // + this.ballSelectControl5.BackColor = System.Drawing.Color.White; + this.ballSelectControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.ballSelectControl5.Location = new System.Drawing.Point(892, 4); + this.ballSelectControl5.Name = "ballSelectControl5"; + this.ballSelectControl5.Size = new System.Drawing.Size(215, 193); + this.ballSelectControl5.TabIndex = 4; + // + // ballSelectControl3 + // + this.ballSelectControl3.BackColor = System.Drawing.Color.White; + this.ballSelectControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.ballSelectControl3.Location = new System.Drawing.Point(448, 4); + this.ballSelectControl3.Name = "ballSelectControl3"; + this.ballSelectControl3.Size = new System.Drawing.Size(215, 193); + this.ballSelectControl3.TabIndex = 2; + // + // ballSelectControl4 + // + this.ballSelectControl4.BackColor = System.Drawing.Color.White; + this.ballSelectControl4.Dock = System.Windows.Forms.DockStyle.Fill; + this.ballSelectControl4.Location = new System.Drawing.Point(670, 4); + this.ballSelectControl4.Name = "ballSelectControl4"; + this.ballSelectControl4.Size = new System.Drawing.Size(215, 193); + this.ballSelectControl4.TabIndex = 3; + // // MainForm // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(1357, 343); + this.ClientSize = new System.Drawing.Size(1343, 307); this.Controls.Add(this.tableLayoutPanel1); this.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -164,6 +194,7 @@ this.Text = "Lotto Picker"; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); this.ResumeLayout(false); } @@ -178,6 +209,8 @@ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; private System.Windows.Forms.Button btnGenerate; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.Button btnHistory; } } diff --git a/LottoPicker/LottoPicker/MainForm.cs b/LottoPicker/LottoPicker/MainForm.cs index d840a67..0d730d9 100644 --- a/LottoPicker/LottoPicker/MainForm.cs +++ b/LottoPicker/LottoPicker/MainForm.cs @@ -1,4 +1,7 @@ -using System; +using LottoPicker.Dialog; +using LottoPicker.Utility; +using Newtonsoft.Json.Linq; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -20,12 +23,19 @@ namespace LottoPicker private void btnGenerate_Click(object sender, EventArgs e) { - ballSelectControl1.Pick(); - ballSelectControl2.Pick(); - ballSelectControl3.Pick(); - ballSelectControl4.Pick(); - ballSelectControl5.Pick(); - ballSelectControl6.Pick(); + List selected = new List(6); + selected.Add(ballSelectControl1.Pick(selected)); + selected.Add(ballSelectControl2.Pick(selected)); + selected.Add(ballSelectControl3.Pick(selected)); + selected.Add(ballSelectControl4.Pick(selected)); + selected.Add(ballSelectControl5.Pick(selected)); + selected.Add(ballSelectControl6.Pick(selected)); + } + + private void btnHistory_Click(object sender, EventArgs e) + { + HistoryDialog dlg = new HistoryDialog(); + dlg.ShowDialog(); } } } diff --git a/LottoPicker/LottoPicker/Properties/Resources.Designer.cs b/LottoPicker/LottoPicker/Properties/Resources.Designer.cs index bd107fa..32a729f 100644 --- a/LottoPicker/LottoPicker/Properties/Resources.Designer.cs +++ b/LottoPicker/LottoPicker/Properties/Resources.Designer.cs @@ -8,62 +8,54 @@ // //------------------------------------------------------------------------------ -namespace LottoPicker.Properties -{ - - +namespace LottoPicker.Properties { + using System; + + /// /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. /// // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder // 클래스에서 자동으로 생성되었습니다. - // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 - // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 + // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - + internal class Resources { + private static global::System.Resources.ResourceManager resourceMan; - + private static global::System.Globalization.CultureInfo resourceCulture; - + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { + internal Resources() { } - + /// /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LottoPicker.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } - + /// /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 /// 재정의합니다. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { + internal static global::System.Globalization.CultureInfo Culture { + get { return resourceCulture; } - set - { + set { resourceCulture = value; } } diff --git a/LottoPicker/LottoPicker/Properties/Settings.Designer.cs b/LottoPicker/LottoPicker/Properties/Settings.Designer.cs index 1f2491a..8ba43de 100644 --- a/LottoPicker/LottoPicker/Properties/Settings.Designer.cs +++ b/LottoPicker/LottoPicker/Properties/Settings.Designer.cs @@ -1,28 +1,24 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. // //------------------------------------------------------------------------------ -namespace LottoPicker.Properties -{ - - +namespace LottoPicker.Properties { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { + + public static Settings Default { + get { return defaultInstance; } } diff --git a/LottoPicker/LottoPicker/Utility/WebAPIUtil.cs b/LottoPicker/LottoPicker/Utility/WebAPIUtil.cs new file mode 100644 index 0000000..50c4833 --- /dev/null +++ b/LottoPicker/LottoPicker/Utility/WebAPIUtil.cs @@ -0,0 +1,42 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace LottoPicker.Utility +{ + internal class WebAPIUtil + { + public static JObject CallRequest(string url) + { + JObject obj; + + try + { + WebRequest request = WebRequest.Create(url); + request.Method = "GET"; + request.ContentType = "application/json"; + //request.Headers["user-agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; + using (WebResponse response = request.GetResponse()) + using (Stream dataStream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(dataStream)) + { + string reponse = reader.ReadToEnd(); + obj = JObject.Parse(reponse); + } + + + } + catch (Exception ex) + { + throw; + } + + return obj; + } + } +} diff --git a/LottoPicker/LottoPicker/packages.config b/LottoPicker/LottoPicker/packages.config new file mode 100644 index 0000000..0b14af3 --- /dev/null +++ b/LottoPicker/LottoPicker/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file