Browse Source

начальный вариант

ypv 3 năm trước cách đây
mục cha
commit
5e10a7fe0b

BIN
.vs/metaldetector/v14/.suo


+ 6 - 0
App.config

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

+ 282 - 0
FormMain.Designer.cs

@@ -0,0 +1,282 @@
+namespace metaldetector
+{
+    partial class FormMain
+    {
+        /// <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()
+        {
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.rbLocator = new System.Windows.Forms.RadioButton();
+            this.rbActive = new System.Windows.Forms.RadioButton();
+            this.rbPass = new System.Windows.Forms.RadioButton();
+            this.trbFreq = new System.Windows.Forms.TrackBar();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.lblFreqDelta = new System.Windows.Forms.Label();
+            this.trbFreqDelta = new System.Windows.Forms.TrackBar();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.picMap = new System.Windows.Forms.PictureBox();
+            this.groupBox4 = new System.Windows.Forms.GroupBox();
+            this.lblCursor = new System.Windows.Forms.Label();
+            this.button1 = new System.Windows.Forms.Button();
+            this.gbLog = new System.Windows.Forms.GroupBox();
+            this.trackBar1 = new System.Windows.Forms.TrackBar();
+            this.rtbLog = new System.Windows.Forms.RichTextBox();
+            this.btnSoundOn = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trbFreq)).BeginInit();
+            this.groupBox2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trbFreqDelta)).BeginInit();
+            this.groupBox3.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.picMap)).BeginInit();
+            this.groupBox4.SuspendLayout();
+            this.gbLog.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.rbLocator);
+            this.groupBox1.Controls.Add(this.rbActive);
+            this.groupBox1.Controls.Add(this.rbPass);
+            this.groupBox1.Location = new System.Drawing.Point(510, 12);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(174, 110);
+            this.groupBox1.TabIndex = 1;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "Тип детектора:";
+            // 
+            // rbLocator
+            // 
+            this.rbLocator.AutoSize = true;
+            this.rbLocator.Location = new System.Drawing.Point(19, 77);
+            this.rbLocator.Name = "rbLocator";
+            this.rbLocator.Size = new System.Drawing.Size(150, 19);
+            this.rbLocator.TabIndex = 2;
+            this.rbLocator.TabStop = true;
+            this.rbLocator.Text = "Нелинейный локатор";
+            this.rbLocator.UseVisualStyleBackColor = true;
+            this.rbLocator.CheckedChanged += new System.EventHandler(this.rbLocator_CheckedChanged);
+            // 
+            // rbActive
+            // 
+            this.rbActive.AutoSize = true;
+            this.rbActive.Location = new System.Drawing.Point(19, 51);
+            this.rbActive.Name = "rbActive";
+            this.rbActive.Size = new System.Drawing.Size(140, 19);
+            this.rbActive.TabIndex = 1;
+            this.rbActive.TabStop = true;
+            this.rbActive.Text = "Активный детектор";
+            this.rbActive.UseVisualStyleBackColor = true;
+            this.rbActive.CheckedChanged += new System.EventHandler(this.rbActive_CheckedChanged);
+            // 
+            // rbPass
+            // 
+            this.rbPass.AutoSize = true;
+            this.rbPass.Location = new System.Drawing.Point(19, 25);
+            this.rbPass.Name = "rbPass";
+            this.rbPass.Size = new System.Drawing.Size(148, 19);
+            this.rbPass.TabIndex = 0;
+            this.rbPass.TabStop = true;
+            this.rbPass.Text = "Пассивный детектор";
+            this.rbPass.UseVisualStyleBackColor = true;
+            this.rbPass.CheckedChanged += new System.EventHandler(this.rbPass_CheckedChanged);
+            // 
+            // trbFreq
+            // 
+            this.trbFreq.Location = new System.Drawing.Point(6, 19);
+            this.trbFreq.Name = "trbFreq";
+            this.trbFreq.Size = new System.Drawing.Size(161, 50);
+            this.trbFreq.TabIndex = 2;
+            this.trbFreq.Scroll += new System.EventHandler(this.trbFreq_Scroll);
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Controls.Add(this.lblFreqDelta);
+            this.groupBox2.Controls.Add(this.trbFreqDelta);
+            this.groupBox2.Controls.Add(this.trbFreq);
+            this.groupBox2.Location = new System.Drawing.Point(510, 135);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(174, 122);
+            this.groupBox2.TabIndex = 3;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "Частота:";
+            // 
+            // lblFreqDelta
+            // 
+            this.lblFreqDelta.AutoSize = true;
+            this.lblFreqDelta.Location = new System.Drawing.Point(10, 50);
+            this.lblFreqDelta.Name = "lblFreqDelta";
+            this.lblFreqDelta.Size = new System.Drawing.Size(120, 15);
+            this.lblFreqDelta.TabIndex = 4;
+            this.lblFreqDelta.Text = "Усиление разности";
+            // 
+            // trbFreqDelta
+            // 
+            this.trbFreqDelta.Location = new System.Drawing.Point(8, 68);
+            this.trbFreqDelta.Name = "trbFreqDelta";
+            this.trbFreqDelta.Size = new System.Drawing.Size(161, 50);
+            this.trbFreqDelta.TabIndex = 3;
+            // 
+            // groupBox3
+            // 
+            this.groupBox3.Controls.Add(this.picMap);
+            this.groupBox3.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+            this.groupBox3.Location = new System.Drawing.Point(10, 12);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(490, 568);
+            this.groupBox3.TabIndex = 4;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "Карта местности";
+            // 
+            // picMap
+            // 
+            this.picMap.Cursor = System.Windows.Forms.Cursors.Cross;
+            this.picMap.Location = new System.Drawing.Point(6, 20);
+            this.picMap.Name = "picMap";
+            this.picMap.Size = new System.Drawing.Size(480, 540);
+            this.picMap.TabIndex = 0;
+            this.picMap.TabStop = false;
+            this.picMap.MouseMove += new System.Windows.Forms.MouseEventHandler(this.picMap_MouseMove);
+            // 
+            // groupBox4
+            // 
+            this.groupBox4.Controls.Add(this.lblCursor);
+            this.groupBox4.Location = new System.Drawing.Point(510, 276);
+            this.groupBox4.Name = "groupBox4";
+            this.groupBox4.Size = new System.Drawing.Size(174, 130);
+            this.groupBox4.TabIndex = 5;
+            this.groupBox4.TabStop = false;
+            this.groupBox4.Text = "Данные:";
+            // 
+            // lblCursor
+            // 
+            this.lblCursor.AutoSize = true;
+            this.lblCursor.Location = new System.Drawing.Point(13, 25);
+            this.lblCursor.Name = "lblCursor";
+            this.lblCursor.Size = new System.Drawing.Size(58, 15);
+            this.lblCursor.TabIndex = 0;
+            this.lblCursor.Text = "X:---; Y:---";
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(510, 421);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(174, 40);
+            this.button1.TabIndex = 6;
+            this.button1.Text = "Генерировать карту";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // gbLog
+            // 
+            this.gbLog.Controls.Add(this.trackBar1);
+            this.gbLog.Controls.Add(this.rtbLog);
+            this.gbLog.Location = new System.Drawing.Point(10, 586);
+            this.gbLog.Name = "gbLog";
+            this.gbLog.Size = new System.Drawing.Size(669, 173);
+            this.gbLog.TabIndex = 7;
+            this.gbLog.TabStop = false;
+            this.gbLog.Text = "Лог работы";
+            // 
+            // trackBar1
+            // 
+            this.trackBar1.Location = new System.Drawing.Point(237, 100);
+            this.trackBar1.Name = "trackBar1";
+            this.trackBar1.Size = new System.Drawing.Size(8, 50);
+            this.trackBar1.TabIndex = 1;
+            // 
+            // rtbLog
+            // 
+            this.rtbLog.Location = new System.Drawing.Point(9, 24);
+            this.rtbLog.Name = "rtbLog";
+            this.rtbLog.Size = new System.Drawing.Size(649, 143);
+            this.rtbLog.TabIndex = 0;
+            this.rtbLog.Text = "";
+            // 
+            // btnSoundOn
+            // 
+            this.btnSoundOn.Location = new System.Drawing.Point(510, 470);
+            this.btnSoundOn.Name = "btnSoundOn";
+            this.btnSoundOn.Size = new System.Drawing.Size(174, 40);
+            this.btnSoundOn.TabIndex = 8;
+            this.btnSoundOn.Text = "Включить звук";
+            this.btnSoundOn.UseVisualStyleBackColor = true;
+            this.btnSoundOn.Click += new System.EventHandler(this.btnSoundOn_Click);
+            // 
+            // FormMain
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(692, 771);
+            this.Controls.Add(this.btnSoundOn);
+            this.Controls.Add(this.gbLog);
+            this.Controls.Add(this.button1);
+            this.Controls.Add(this.groupBox4);
+            this.Controls.Add(this.groupBox3);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+            this.Name = "FormMain";
+            this.Text = "Моделирование работы детекторов металла";
+            this.Load += new System.EventHandler(this.FormMain_Load);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trbFreq)).EndInit();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trbFreqDelta)).EndInit();
+            this.groupBox3.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.picMap)).EndInit();
+            this.groupBox4.ResumeLayout(false);
+            this.groupBox4.PerformLayout();
+            this.gbLog.ResumeLayout(false);
+            this.gbLog.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.RadioButton rbActive;
+        private System.Windows.Forms.RadioButton rbPass;
+        private System.Windows.Forms.RadioButton rbLocator;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.GroupBox groupBox3;
+        private System.Windows.Forms.PictureBox picMap;
+        private System.Windows.Forms.GroupBox groupBox4;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.GroupBox gbLog;
+        private System.Windows.Forms.RichTextBox rtbLog;
+        private System.Windows.Forms.TrackBar trackBar1;
+        private System.Windows.Forms.TrackBar trbFreqDelta;
+        private System.Windows.Forms.Label lblFreqDelta;
+        private System.Windows.Forms.Button btnSoundOn;
+        public System.Windows.Forms.TrackBar trbFreq;
+        public System.Windows.Forms.Label lblCursor;
+    }
+}
+

+ 294 - 0
FormMain.cs

@@ -0,0 +1,294 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace metaldetector
+{
+    public partial class FormMain : Form
+    {
+        [DllImport("kernel32.dll", SetLastError = true)]
+        public static extern bool Beep(int frequency, int duration);
+
+
+        public static Bitmap bmp0;
+        public static bool SoundOn = false;
+        public static int currentFreq = 1000;
+        public static int realFreq = 1000;
+
+        public static string cursorTextPos = "";
+        public static string cursorTextColor = "";
+        public static string cursorTextFreq = "";
+        public static string cursorText = "";
+
+
+//Показываем отладочные данные на lblCursor
+        public void ShowCursorText()
+        {
+            cursorText = cursorTextPos + "\n"
+                + cursorTextColor + "\n"
+                + cursorTextFreq + "\n";
+
+            this.lblCursor.Text = cursorText;
+        }
+
+
+        public static void Sound()
+        {
+            while (SoundOn)
+            {
+                //Beep(currentFreq, 500);
+                //Thread.Sleep(1);
+                Beep(realFreq, 500);
+            }
+        }
+
+        public void GenerateMap()
+        {
+            int start_x = 0;
+            int end_x = 0;
+            int start_y = 0;
+            int end_y = 0;
+
+            //высота и ширина квадрата в пикселях
+            int rect_width = 20;
+            int rect_height = 20;
+
+            int ferro_n = 3; //количество ферромагнетиков
+            int semi_n = 2; //количество полупроводников
+
+
+            Bitmap bmp1 = new Bitmap(picMap.Width, picMap.Height, PixelFormat.Format24bppRgb);
+            Graphics g = Graphics.FromImage(bmp1);
+            g.Clear(Color.Black);
+            // Создаем объекты-кисти для закрашивания фигур
+            SolidBrush sbDia = new SolidBrush(Color.Red); //диамагнетик
+            SolidBrush sbPara = new SolidBrush(Color.Green); //парамагнетик
+            SolidBrush sbFerro = new SolidBrush(Color.Blue); //ферромагнетик
+            SolidBrush sbSemi = new SolidBrush(Color.Black); //полупроводник
+
+
+
+
+            int x_n = picMap.Width / rect_width;
+            int y_n = picMap.Height / rect_height;
+            int n_count = x_n * y_n; //количество квадратов
+            rtbLog.Text = rtbLog.Text + "Генерация. x_n: " + x_n.ToString() + "; y_n: " + y_n.ToString() + "\n";
+
+            Random rnd = new Random();
+            int r = 0;
+
+            for (int i = 0; i < x_n; i++)
+            {
+                for (int j = 0; j < y_n; j++)
+                {
+                    start_x = i * rect_width;
+                    end_x = start_x + rect_width;
+                    start_y = j * rect_height;
+                    end_y = start_y + rect_height;
+
+                    r = rnd.Next(0, 2);
+                    //rtbLog.Text = rtbLog.Text + "i: " + i.ToString() + "; j: " + j.ToString() + "; start_x: " + start_x.ToString() + "; start_y: " + start_y.ToString() + "; r: " + r.ToString() + "\n";
+                    if (r == 0)
+                    {
+                        g.FillRectangle(sbDia, start_x, start_y, rect_width, rect_height);
+                    } else
+                    {
+                        g.FillRectangle(sbPara, start_x, start_y, rect_width, rect_height);
+                    }
+
+                    //рисуем ферромагнетик
+                    r = rnd.Next(0, n_count / ferro_n);
+                    if (r == 0)
+                    {
+                        g.FillRectangle(sbFerro, start_x, start_y, rect_width, rect_height);
+                    }
+
+                    //рисуем полупроводник
+                    r = rnd.Next(0, n_count / semi_n);
+                    if (r == 0)
+                    {
+                        g.FillRectangle(sbSemi, start_x, start_y, rect_width, rect_height);
+                    }
+
+
+                }
+            }
+
+            bmp0 = (Bitmap)bmp1.Clone();
+            picMap.Image = bmp1;
+        }
+
+        public FormMain()
+        {
+            InitializeComponent();
+
+        }
+
+        private void rbPass_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbPass.Checked) {
+                trbFreqDelta.Enabled = true;
+                lblFreqDelta.Enabled = true;
+            } else {
+                trbFreqDelta.Enabled = false;
+                lblFreqDelta.Enabled = false;
+            }
+
+        }
+
+        private void rbActive_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbPass.Checked)
+            {
+                trbFreqDelta.Enabled = true;
+                lblFreqDelta.Enabled = true;
+            }
+            else
+            {
+                trbFreqDelta.Enabled = false;
+                lblFreqDelta.Enabled = false;
+            }
+
+        }
+
+        private void rbLocator_CheckedChanged(object sender, EventArgs e)
+        {
+            if (rbPass.Checked)
+            {
+                trbFreqDelta.Enabled = true;
+                lblFreqDelta.Enabled = true;
+            }
+            else
+            {
+                trbFreqDelta.Enabled = false;
+                lblFreqDelta.Enabled = false;
+            }
+
+        }
+
+
+
+
+        private void picMap_MouseMove(object sender, MouseEventArgs e)
+        {
+            //позиция курсора
+
+            //рисуем круг металлодетектора
+            Bitmap bmp1 = (Bitmap)bmp0.Clone();
+            Graphics g = Graphics.FromImage(bmp1);
+            Pen myWind = new Pen(Color.Yellow, 4);
+            //пассивный
+            if (rbPass.Checked)
+            {
+                myWind = new Pen(Color.Yellow, 4);
+                g.DrawEllipse(myWind, e.X - 11, e.Y - 11, 20, 20);
+            }
+            //активный
+            if (rbActive.Checked)
+            {
+                myWind = new Pen(Color.Yellow, 1);
+                g.DrawEllipse(myWind, e.X - 6, e.Y - 6, 10, 10);
+                myWind = new Pen(Color.Magenta, 1);
+                g.DrawEllipse(myWind, e.X - 11, e.Y - 11, 20, 20);
+
+            }
+
+            if (rbLocator.Checked)
+            {
+                myWind = new Pen(Color.Cyan, 1);
+                g.DrawEllipse(myWind, e.X - 6, e.Y - 6, 10, 10);
+                myWind = new Pen(Color.Cyan, 1);
+                g.DrawEllipse(myWind, e.X - 11, e.Y - 11, 20, 20);
+
+            }
+
+            picMap.Image = bmp1;
+
+            //цвет под курсором
+            try
+            {
+                Color clr = bmp0.GetPixel(e.X, e.Y);
+                byte r = clr.R;
+                byte gr = clr.G;
+                byte b = clr.B;
+
+                cursorTextPos = "X: " + Convert.ToString(e.X) + "; Y: " + Convert.ToString(e.Y);
+                cursorTextColor = "R: " + Convert.ToString(r) + "; G: " + Convert.ToString(gr) + "; B: " + Convert.ToString(b);
+
+                //Перерасчет реальной частоты
+
+                //пассивный
+                if (rbPass.Checked)
+                {
+                    if ((r==0) && (gr==0) && (b==0))
+                    {
+                        realFreq = currentFreq / 10;
+                    } else
+                    {
+                        realFreq = currentFreq + r / 255 * trbFreqDelta.Value * 3 - gr / 128 * trbFreqDelta.Value * 3;
+                    }
+                }
+
+                cursorTextFreq = "Base Freq: " + currentFreq.ToString() + "; Real Freq: " + realFreq.ToString();
+                ShowCursorText();
+
+            }
+            catch
+            {
+                cursorTextPos = "X: ; Y:";
+                ShowCursorText();
+
+            }
+
+
+
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            GenerateMap();
+        }
+
+        private void FormMain_Load(object sender, EventArgs e)
+        {
+            GenerateMap();
+            currentFreq = trbFreq.Value * 500 + 500;
+
+        }
+
+        private void btnSoundOn_Click(object sender, EventArgs e)
+        {
+            SoundOn = !SoundOn;
+
+            if(SoundOn)
+            {
+                btnSoundOn.Text = "Выключить звук";
+                // создаем новый поток
+                Thread myThread = new Thread(new ThreadStart(Sound));
+                myThread.Start(); // запускаем поток
+
+            }
+            else
+            {
+                btnSoundOn.Text = "Включить звук";
+            }
+        }
+
+        private void trbFreq_Scroll(object sender, EventArgs e)
+        {
+            currentFreq = trbFreq.Value * 500 + 500;
+            cursorTextFreq = "Base Freq: " + currentFreq.ToString();
+            ShowCursorText();
+
+        }
+    }
+}

+ 120 - 0
FormMain.resx

@@ -0,0 +1,120 @@
+<?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>
+</root>

+ 22 - 0
Program.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace metaldetector
+{
+    static class Program
+    {
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new FormMain());
+        }
+    }
+}

+ 36 - 0
Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("metaldetector")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("metaldetector")]
+[assembly: AssemblyCopyright("Copyright ©  2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b74d5042-c7ac-4013-81a6-3c234fec5d94")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 71 - 0
Properties/Resources.Designer.cs

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace metaldetector.Properties
+{
+
+
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    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()
+        {
+        }
+
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("metaldetector.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?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.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: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" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </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" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 30 - 0
Properties/Settings.Designer.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace metaldetector.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
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

BIN
bin/Debug/metaldetector.exe


+ 6 - 0
bin/Debug/metaldetector.exe.config

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

BIN
bin/Debug/metaldetector.pdb


BIN
bin/Debug/metaldetector.vshost.exe


+ 6 - 0
bin/Debug/metaldetector.vshost.exe.config

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

+ 11 - 0
bin/Debug/metaldetector.vshost.exe.manifest

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+    <security>
+      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+</assembly>

+ 90 - 0
metaldetector.csproj

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{B74D5042-C7AC-4013-81A6-3C234FEC5D94}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>metaldetector</RootNamespace>
+    <AssemblyName>metaldetector</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="FormMain.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FormMain.Designer.cs">
+      <DependentUpon>FormMain.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="FormMain.resx">
+      <DependentUpon>FormMain.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 22 - 0
metaldetector.sln

@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "metaldetector", "metaldetector.csproj", "{B74D5042-C7AC-4013-81A6-3C234FEC5D94}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B74D5042-C7AC-4013-81A6-3C234FEC5D94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B74D5042-C7AC-4013-81A6-3C234FEC5D94}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B74D5042-C7AC-4013-81A6-3C234FEC5D94}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B74D5042-C7AC-4013-81A6-3C234FEC5D94}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

BIN
obj/Debug/DesignTimeResolveAssemblyReferences.cache


BIN
obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache


+ 0 - 0
obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs


+ 0 - 0
obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs


+ 0 - 0
obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs


BIN
obj/Debug/metaldetector.FormMain.resources


BIN
obj/Debug/metaldetector.Properties.Resources.resources


+ 9 - 0
obj/Debug/metaldetector.csproj.FileListAbsolute.txt

@@ -0,0 +1,9 @@
+C:\0\metaldetector\metaldetector\bin\Debug\metaldetector.exe.config
+C:\0\metaldetector\metaldetector\bin\Debug\metaldetector.exe
+C:\0\metaldetector\metaldetector\bin\Debug\metaldetector.pdb
+C:\0\metaldetector\metaldetector\obj\Debug\metaldetector.csprojResolveAssemblyReference.cache
+C:\0\metaldetector\metaldetector\obj\Debug\metaldetector.FormMain.resources
+C:\0\metaldetector\metaldetector\obj\Debug\metaldetector.Properties.Resources.resources
+C:\0\metaldetector\metaldetector\obj\Debug\metaldetector.csproj.GenerateResource.Cache
+C:\0\metaldetector\metaldetector\obj\Debug\metaldetector.exe
+C:\0\metaldetector\metaldetector\obj\Debug\metaldetector.pdb

BIN
obj/Debug/metaldetector.csproj.GenerateResource.Cache


BIN
obj/Debug/metaldetector.csprojResolveAssemblyReference.cache


BIN
obj/Debug/metaldetector.exe


BIN
obj/Debug/metaldetector.pdb