main
syeffort 2 years ago
parent 6f20377c65
commit 748ab0fd72
  1. 6
      LottoPicker/LottoPicker/App.config
  2. 17
      LottoPicker/LottoPicker/CustomControl/BallSelectControl.cs
  3. 163
      LottoPicker/LottoPicker/Dialog/HistoryDialog.Designer.cs
  4. 80
      LottoPicker/LottoPicker/Dialog/HistoryDialog.cs
  5. 406
      LottoPicker/LottoPicker/Dialog/HistoryDialog.resx
  6. 18
      LottoPicker/LottoPicker/LottoPicker.csproj
  7. 169
      LottoPicker/LottoPicker/MainForm.Designer.cs
  8. 24
      LottoPicker/LottoPicker/MainForm.cs
  9. 48
      LottoPicker/LottoPicker/Properties/Resources.Designer.cs
  10. 30
      LottoPicker/LottoPicker/Properties/Settings.Designer.cs
  11. 42
      LottoPicker/LottoPicker/Utility/WebAPIUtil.cs
  12. 4
      LottoPicker/LottoPicker/packages.config

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup> </startup>
</configuration> </configuration>

@ -34,5 +34,22 @@ namespace LottoPicker.CustomControl
ctrBall.Visible = true; ctrBall.Visible = true;
} }
public int Pick(List<int> 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;
}
} }
} }

@ -0,0 +1,163 @@
namespace LottoPicker.Dialog
{
partial class HistoryDialog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

@ -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<int> history = new List<int>(6 * (end - start + 1));
for (int i = start; i <= end; i++)
{
history.AddRange(GetHistory(i));
}
history.Sort();
Dictionary<string, int> historyCount = new Dictionary<string, int>();
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<int> GetHistory(int round)
{
List<int> result = new List<int>(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<string, int> history)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (KeyValuePair<string, int> pair in history)
{
string append = $"[{pair.Key}공] → {pair.Value}회";
stringBuilder.AppendLine(append);
}
txtResult.AppendText(stringBuilder.ToString());
}
}
}

@ -0,0 +1,406 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
iv8P78wCc+AH79MAAAAASUVORK5CYII=
</value>
</data>
</root>

@ -8,9 +8,10 @@
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>LottoPicker</RootNamespace> <RootNamespace>LottoPicker</RootNamespace>
<AssemblyName>LottoPicker</AssemblyName> <AssemblyName>LottoPicker</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@ -35,6 +36,9 @@
<ApplicationIcon>lotto.ico</ApplicationIcon> <ApplicationIcon>lotto.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
@ -60,6 +64,12 @@
<Compile Include="CustomControl\BallSelectControl.Designer.cs"> <Compile Include="CustomControl\BallSelectControl.Designer.cs">
<DependentUpon>BallSelectControl.cs</DependentUpon> <DependentUpon>BallSelectControl.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Dialog\HistoryDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\HistoryDialog.Designer.cs">
<DependentUpon>HistoryDialog.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs"> <Compile Include="MainForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@ -69,12 +79,16 @@
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utility\Utils.cs" /> <Compile Include="Utility\Utils.cs" />
<Compile Include="Utility\WebAPIUtil.cs" />
<EmbeddedResource Include="CustomControl\BallControl.resx"> <EmbeddedResource Include="CustomControl\BallControl.resx">
<DependentUpon>BallControl.cs</DependentUpon> <DependentUpon>BallControl.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="CustomControl\BallSelectControl.resx"> <EmbeddedResource Include="CustomControl\BallSelectControl.resx">
<DependentUpon>BallSelectControl.cs</DependentUpon> <DependentUpon>BallSelectControl.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Dialog\HistoryDialog.resx">
<DependentUpon>HistoryDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx"> <EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon> <DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
@ -86,7 +100,9 @@
<Compile Include="Properties\Resources.Designer.cs"> <Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile> </Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>

@ -29,94 +29,45 @@
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); 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.ballSelectControl1 = new LottoPicker.CustomControl.BallSelectControl();
this.ballSelectControl6 = new LottoPicker.CustomControl.BallSelectControl();
this.ballSelectControl2 = new LottoPicker.CustomControl.BallSelectControl(); this.ballSelectControl2 = new LottoPicker.CustomControl.BallSelectControl();
this.ballSelectControl5 = new LottoPicker.CustomControl.BallSelectControl();
this.ballSelectControl3 = new LottoPicker.CustomControl.BallSelectControl(); this.ballSelectControl3 = new LottoPicker.CustomControl.BallSelectControl();
this.ballSelectControl4 = 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.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
this.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 // tableLayoutPanel1
// //
this.tableLayoutPanel1.ColumnCount = 1; this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); 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.btnGenerate, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0); 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.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1"; 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.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F)); 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; this.tableLayoutPanel1.TabIndex = 3;
// //
// btnGenerate // btnGenerate
// //
this.btnGenerate.Dock = System.Windows.Forms.DockStyle.Fill; 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.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.TabIndex = 3;
this.btnGenerate.Text = "Generate"; this.btnGenerate.Text = "Generate";
this.btnGenerate.UseVisualStyleBackColor = true; this.btnGenerate.UseVisualStyleBackColor = true;
@ -139,19 +90,98 @@
this.tableLayoutPanel2.Controls.Add(this.ballSelectControl3, 2, 0); this.tableLayoutPanel2.Controls.Add(this.ballSelectControl3, 2, 0);
this.tableLayoutPanel2.Controls.Add(this.ballSelectControl4, 3, 0); this.tableLayoutPanel2.Controls.Add(this.ballSelectControl4, 3, 0);
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; 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.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 1; 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.Percent, 100F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); 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; 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 // MainForm
// //
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.White; 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.Controls.Add(this.tableLayoutPanel1);
this.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); 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.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
@ -164,6 +194,7 @@
this.Text = "Lotto Picker"; this.Text = "Lotto Picker";
this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false); this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel3.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -178,6 +209,8 @@
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.Button btnGenerate; private System.Windows.Forms.Button btnGenerate;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
private System.Windows.Forms.Button btnHistory;
} }
} }

@ -1,4 +1,7 @@
using System; using LottoPicker.Dialog;
using LottoPicker.Utility;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
@ -20,12 +23,19 @@ namespace LottoPicker
private void btnGenerate_Click(object sender, EventArgs e) private void btnGenerate_Click(object sender, EventArgs e)
{ {
ballSelectControl1.Pick(); List<int> selected = new List<int>(6);
ballSelectControl2.Pick(); selected.Add(ballSelectControl1.Pick(selected));
ballSelectControl3.Pick(); selected.Add(ballSelectControl2.Pick(selected));
ballSelectControl4.Pick(); selected.Add(ballSelectControl3.Pick(selected));
ballSelectControl5.Pick(); selected.Add(ballSelectControl4.Pick(selected));
ballSelectControl6.Pick(); selected.Add(ballSelectControl5.Pick(selected));
selected.Add(ballSelectControl6.Pick(selected));
}
private void btnHistory_Click(object sender, EventArgs e)
{
HistoryDialog dlg = new HistoryDialog();
dlg.ShowDialog();
} }
} }
} }

@ -8,62 +8,54 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace LottoPicker.Properties namespace LottoPicker.Properties {
{ using System;
/// <summary> /// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary> /// </summary>
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
// 클래스에서 자동으로 생성되었습니다. // 클래스에서 자동으로 생성되었습니다.
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
// ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources internal class Resources {
{
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() internal Resources() {
{
} }
/// <summary> /// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager internal static global::System.Resources.ResourceManager ResourceManager {
{ get {
get if (object.ReferenceEquals(resourceMan, null)) {
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LottoPicker.Properties.Resources", typeof(Resources).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LottoPicker.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
} }
} }
/// <summary> /// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
/// 재정의합니다. /// 재정의합니다.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture internal static global::System.Globalization.CultureInfo Culture {
{ get {
get
{
return resourceCulture; return resourceCulture;
} }
set set {
{
resourceCulture = value; resourceCulture = value;
} }
} }

@ -1,28 +1,24 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// 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. // 이러한 변경 내용이 손실됩니다.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace LottoPicker.Properties namespace LottoPicker.Properties {
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default public static Settings Default {
{ get {
get
{
return defaultInstance; return defaultInstance;
} }
} }

@ -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;
}
}
}

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
</packages>
Loading…
Cancel
Save