Pagar.cs

Nos vamos al código del formulario Pagar.cs y escribmos las siguientes líneas.
 
using MySql.Data.MySqlClient;
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 GatoAbarrotero
{
    public partial class frmPagar : Form
    {
        MySqlConnection conexion = new MySqlConnection("server=localhost;User id=admin;password=adminlara;database=puntodeventadb");
        DataRow rowVenta;
        private DataTable data = new DataTable();
        public frmPagar(DataTable data)
        {
            InitializeComponent();
            this.data = data;
        }
    }
}       
            
            
            
    

A continuación hacemos doble click sobre el formulario.Esto es para hacer modal el formulario
 
 using MySql.Data.MySqlClient;
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 GatoAbarrotero
{
    public partial class frmPagar : Form
    {
        MySqlConnection conexion = new MySqlConnection("server=localhost;User id=admin;password=adminlara;database=puntodeventadb");
        DataRow rowVenta;
        private DataTable data = new DataTable();
        public frmPagar(DataTable data)
        {
            InitializeComponent();
            this.data = data;
        }
        
        private void FrmPagar_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.None;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;
            // Remove the control box so the form will only display client area.
            this.ControlBox = false;
        }
        
    }
}
 
 
 
   

Antes de iniciar el evento de cobrar tenemos que imprimir el ticket fiscal nos vamos ayudar con dos clases la primera se va llamar RawPrinterHelper.cs
   
  using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace GatoAbarrotero
{
    class RawPrinterHelper
    {
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public class DOCINFOA
        {
            [MarshalAs(UnmanagedType.LPStr)]
            public string pDocName;
            [MarshalAs(UnmanagedType.LPStr)]
            public string pOutputFile;
            [MarshalAs(UnmanagedType.LPStr)]
            public string pDataType;
        }
        [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

        [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool ClosePrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

        [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndDocPrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartPagePrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndPagePrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten);

        // SendBytesToPrinter()
        // When the function is given a printer name and an unmanaged array
        // of bytes, the function sends those bytes to the print queue.
        // Returns true on success, false on failure.
        public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
        {
            Int32 dwError = 0, dwWritten = 0;
            IntPtr hPrinter = new IntPtr(0);
            DOCINFOA di = new DOCINFOA();
            bool bSuccess = false; // Assume failure unless you specifically succeed.

            di.pDocName = "My C#.NET RAW Document";
            di.pDataType = "RAW";

            // Open the printer.
            if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
            {
                // Start a document.
                if (StartDocPrinter(hPrinter, 1, di))
                {
                    // Start a page.
                    if (StartPagePrinter(hPrinter))
                    {
                        // Write your bytes.
                        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                        EndPagePrinter(hPrinter);
                    }
                    EndDocPrinter(hPrinter);
                }
                ClosePrinter(hPrinter);
            }
            // If you did not succeed, GetLastError may give more information
            // about why not.
            if (bSuccess == false)
            {
                dwError = Marshal.GetLastWin32Error();
            }
            return bSuccess;
        }

        public static bool SendStringToPrinter(string szPrinterName, string szString)
        {
            IntPtr pBytes;
            Int32 dwCount;
            // How many characters are in the string?
            dwCount = szString.Length;
            // Assume that the printer is expecting ANSI text, and then convert
            // the string to ANSI text.
            pBytes = Marshal.StringToCoTaskMemAnsi(szString);
            // Send the converted ANSI string to the printer.
            SendBytesToPrinter(szPrinterName, pBytes, dwCount);
            Marshal.FreeCoTaskMem(pBytes);
            return true;
        }
    }
} 
 

La segunda clase seva a llamar Ticket.cs
 
   using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace GatoAbarrotero
{
    class Ticket
    {
        string ticket = "";
        string parte1, parte2;
        string impresora = "POS-58"; // nombre exacto de la impresora como esta en el panel de control
        int max, cort;
        public void LineasGuion()
        {
            ticket = "----------------------------------------\n";   // agrega lineas separadoras -
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime linea
        }
        public void LineasAsterisco()
        {
            ticket = "****************************************\n";   // agrega lineas separadoras *
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime linea
        }
        public void LineasIgual()
        {
            ticket = "========================================\n";   // agrega lineas separadoras =
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime linea
        }
        public void LineasTotales()
        {
            ticket = "                             -----------\n"; ;   // agrega lineas de total
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime linea
        }
        public void EncabezadoVenta()
        {
            ticket = "Articulo        Can    P.Unit    Importe\n";   // agrega lineas de  encabezados
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
        }
        public void TextoIzquierda(string par1)                          // agrega texto a la izquierda
        {
            max = par1.Length;
            if (max > 40)                                 // **********
            {
                cort = max - 40;
                parte1 = par1.Remove(40, cort);        // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            ticket = parte1 + "\n";
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
        }
        public void TextoDerecha(string par1)
        {
            ticket = "";
            max = par1.Length;
            if (max > 40)                                 // **********
            {
                cort = max - 40;
                parte1 = par1.Remove(40, cort);           // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            max = 40 - par1.Length;                     // obtiene la cantidad de espacios para llegar a 40
            for (int i = 0; i < max; i++)
            {
                ticket += " ";                          // agrega espacios para alinear a la derecha
            }
            ticket += parte1 + "\n";                    //Agrega el texto
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
        }
        public void TextoCentro(string par1)
        {
            ticket = "";
            max = par1.Length;
            if (max > 40)                                 // **********
            {
                cort = max - 40;
                parte1 = par1.Remove(40, cort);          // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            max = (int)(40 - parte1.Length) / 2;         // saca la cantidad de espacios libres y divide entre dos
            for (int i = 0; i < max; i++)                // **********
            {
                ticket += " ";                           // Agrega espacios antes del texto a centrar
            }                                            // **********
            ticket += parte1 + "\n";
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
        }
        public void TextoExtremos(string par1, string par2)
        {
            max = par1.Length;
            if (max > 18)                                 // **********
            {
                cort = max - 18;
                parte1 = par1.Remove(18, cort);          // si par1 es mayor que 18 lo corta
            }
            else { parte1 = par1; }                      // **********
            ticket = parte1;                             // agrega el primer parametro
            max = par2.Length;
            if (max > 18)                                 // **********
            {
                cort = max - 18;
                parte2 = par2.Remove(18, cort);          // si par2 es mayor que 18 lo corta
            }
            else { parte2 = par2; }
            max = 40 - (parte1.Length + parte2.Length);
            for (int i = 0; i < max; i++)                 // **********
            {
                ticket += " ";                            // Agrega espacios para poner par2 al final
            }                                             // **********
            ticket += parte2 + "\n";                     // agrega el segundo parametro al final
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
        }
        public void AgregaTotales(string par1, double total)
        {
            max = par1.Length;
            if (max > 25)                                 // **********
            {
                cort = max - 25;
                parte1 = par1.Remove(25, cort);          // si es mayor que 25 lo corta
            }
            else { parte1 = par1; }                      // **********
            ticket = parte1;
            parte2 = total.ToString("c");
            max = 40 - (parte1.Length + parte2.Length);
            for (int i = 0; i < max; i++)                // **********
            {
                ticket += " ";                           // Agrega espacios para poner el valor de moneda al final
            }                                            // **********
            ticket += parte2 + "\n";
            RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
        }
        public void AgregaArticulo(string par1, int cant, double precio, double total)
        {
            if (cant.ToString().Length <= 3 && precio.ToString("c").Length <= 10 && total.ToString("c").Length <= 11) // valida que cant precio y total esten dentro de rango
            {
                max = par1.Length;
                if (max > 16)                                 // **********
                {
                    cort = max - 16;
                    parte1 = par1.Remove(16, cort);          // corta a 16 la descripcion del articulo
                }
                else { parte1 = par1; }                      // **********
                ticket = parte1;                             // agrega articulo
                max = (3 - cant.ToString().Length) + (16 - parte1.Length);
                for (int i = 0; i < max; i++)                // **********
                {
                    ticket += " ";                           // Agrega espacios para poner el valor de cantidad
                }
                ticket += cant.ToString();                   // agrega cantidad
                max = 10 - (precio.ToString("c").Length);
                for (int i = 0; i < max; i++)                // **********
                {
                    ticket += " ";                           // Agrega espacios
                }                                            // **********
                ticket += precio.ToString("c"); // agrega precio
                max = 11 - (total.ToString().Length);
                for (int i = 0; i < max; i++)                // **********
                {
                    ticket += " ";                           // Agrega espacios
                }                                            // **********
                ticket += total.ToString("c") + "\n"; // agrega precio
                RawPrinterHelper.SendStringToPrinter(impresora, ticket); // imprime texto
            }
            else
            {
                MessageBox.Show("Valores fuera de rango");
                RawPrinterHelper.SendStringToPrinter(impresora, "Error, valor fuera de rango\n"); // imprime texto
            }
        }
        public void CortaTicket()
        {
            string corte = "\x1B" + "m";                  // caracteres de corte
            string avance = "\x1B" + "d" + "\x09";        // avanza 9 renglones
            RawPrinterHelper.SendStringToPrinter(impresora, avance); // avanza
            RawPrinterHelper.SendStringToPrinter(impresora, corte); // corta
        }
        public void AbreCajon()
        {
            string cajon0 = "\x1B" + "p" + "\x00" + "\x0F" + "\x96";                  // caracteres de apertura cajon 0
                                                                                      // string cajon1 = "\x1B" + "p" + "\x01" + "\x0F" + "\x96";                 // caracteres de apertura cajon 1
            RawPrinterHelper.SendStringToPrinter(impresora, cajon0); // abre cajon0
            //RawPrinterHelper.SendStringToPrinter(impresora, cajon1); // abre cajon1
        }
    }
}
   
   
 
 

Nos volvemos al formulario Pagar.cs[diseño] y hacemos doble click en el botón Cobrar
 
 using MySql.Data.MySqlClient;
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 GatoAbarrotero
{
    public partial class frmPagar : Form
    {
        MySqlConnection conexion = new MySqlConnection("server=localhost;User id=admin;password=adminlara;database=puntodeventadb");
        DataRow rowVenta;
        private DataTable data = new DataTable();
        public frmPagar(DataTable data)
        {
            InitializeComponent();
            this.data = data;
        }

        private void FrmPagar_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.None;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;
            // Remove the control box so the form will only display client area.
            this.ControlBox = false;
        }
       
        private void BtnCobrar_Click(object sender, EventArgs e)
        {
            decimal cambio;
            string llaveUnica = Guid.NewGuid().ToString();
            DateTime theDate = DateTime.Now;
            string fecha = theDate.ToString("yyyy-MM-dd H:mm:ss");

            int idVenta;
            try
            {
                conexion.Open();
                string insertarQuery = "INSERT INTO ventastotales (idventa,llaveventa,total,fecha) VALUES(null,?llaveventa,?total,?fecha)";
                MySqlCommand cmd = new MySqlCommand(insertarQuery, conexion);
                cmd.Parameters.Add("?llaveventa", MySqlDbType.VarChar, 100).Value = llaveUnica;
                cmd.Parameters.Add("?total", MySqlDbType.Decimal, 60).Value = txtTotal.Text;
                cmd.Parameters.Add("?fecha", MySqlDbType.DateTime, 60).Value = fecha;
                cmd.ExecuteNonQuery();
                conexion.Close();
            }
            catch
            {

                MessageBox.Show("Inserción fallida");
            }
            try
            {
                conexion.Open();
                string selectQuery = "SELECT idventa FROM ventastotales WHERE llaveventa ='" + llaveUnica + "' ";
                MySqlCommand cmd = new MySqlCommand(selectQuery, conexion);
                MySqlDataAdapter selecionnar = new MySqlDataAdapter();
                selecionnar.SelectCommand = cmd;
                DataTable datosVentas = new DataTable();
                selecionnar.Fill(datosVentas);
                rowVenta = datosVentas.Rows[0];
                idVenta = Convert.ToInt32(rowVenta["idventa"]);

                //MessageBox.Show(Dt.Rows.Count.ToString());



                foreach (DataRow row in data.Rows)
                {
                    int cantidad = Convert.ToInt32(row["Cantidad"]);
                    decimal totalVenta = cantidad * Convert.ToDecimal(row["PrecioU"]);
                    string insertarQuery = "INSERT INTO ventasdetalle (idventa,cantidad,total,codigoBarras) " +
                        "VALUES(@idventa,@cantidad,@total,@codigo)";
                    MySqlCommand cmd2 = new MySqlCommand(insertarQuery, conexion);
                    cmd2.Parameters.AddWithValue("@idventa", idVenta);
                    cmd2.Parameters.AddWithValue("@cantidad", cantidad);
                    cmd2.Parameters.AddWithValue("@total", totalVenta);
                    cmd2.Parameters.AddWithValue("@codigo", row[1].ToString());
                    cmd2.ExecuteNonQuery();

                }



                Ticket Ticket1 = new Ticket();
                //Ticket1.AbreCajon();  //abre el cajon
                Ticket1.TextoCentro("GATO ABARROTERO");
                Ticket1.TextoCentro("Venta No." + idVenta);
                Ticket1.TextoCentro("FECHA:" + fecha);// imprime en el centro "Venta mostrador"
                Ticket1.LineasGuion(); // imprime una linea de guiones
                Ticket1.EncabezadoVenta(); // imprime encabezados
                foreach (DataRow row in data.Rows)
                {
                    int cantidad = Convert.ToInt32(row["Cantidad"]);
                    double totalVenta = cantidad * Convert.ToDouble(row["PrecioU"]);
                    String producto = row["Producto"].ToString();
                    double precio = Convert.ToDouble(row["PrecioU"]);
                    Ticket1.AgregaArticulo(producto, cantidad, precio, totalVenta); //imprime una linea de descripcion
                }

                Ticket1.LineasTotales(); // imprime linea

                Ticket1.AgregaTotales("Total", Convert.ToDouble(txtTotal.Text)); // imprime linea con total

                //Ticket1.CortaTicket(); // corta el ticket

                conexion.Close();


            }
            catch (MySqlException E)
            {
                MessageBox.Show(E.ToString());
            }






            cambio = Convert.ToDecimal(txtEfectivo.Text) - Convert.ToDecimal(txtTotal.Text);
            txtCambio.Text = Convert.ToString(cambio);

        }
        
    }
}
 
 
    
  

Hacemos doble click en el Button Cerrar escribimos:
 
 using MySql.Data.MySqlClient;
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 GatoAbarrotero
{
    public partial class frmPagar : Form
    {
        MySqlConnection conexion = new MySqlConnection("server=localhost;User id=admin;password=adminlara;database=puntodeventadb");
        DataRow rowVenta;
        private DataTable data = new DataTable();
        public frmPagar(DataTable data)
        {
            InitializeComponent();
            this.data = data;
        }

        private void FrmPagar_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.None;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.StartPosition = FormStartPosition.CenterScreen;
            // Remove the control box so the form will only display client area.
            this.ControlBox = false;
        }

        private void BtnCobrar_Click(object sender, EventArgs e)
        {
            decimal cambio;
            string llaveUnica = Guid.NewGuid().ToString();
            DateTime theDate = DateTime.Now;
            string fecha = theDate.ToString("yyyy-MM-dd H:mm:ss");

            int idVenta;
            try
            {
                conexion.Open();
                string insertarQuery = "INSERT INTO ventastotales (idventa,llaveventa,total,fecha) VALUES(null,?llaveventa,?total,?fecha)";
                MySqlCommand cmd = new MySqlCommand(insertarQuery, conexion);
                cmd.Parameters.Add("?llaveventa", MySqlDbType.VarChar, 100).Value = llaveUnica;
                cmd.Parameters.Add("?total", MySqlDbType.Decimal, 60).Value = txtTotal.Text;
                cmd.Parameters.Add("?fecha", MySqlDbType.DateTime, 60).Value = fecha;
                cmd.ExecuteNonQuery();
                conexion.Close();
            }
            catch
            {

                MessageBox.Show("Inserción fallida");
            }
            try
            {
                conexion.Open();
                string selectQuery = "SELECT idventa FROM ventastotales WHERE llaveventa ='" + llaveUnica + "' ";
                MySqlCommand cmd = new MySqlCommand(selectQuery, conexion);
                MySqlDataAdapter selecionnar = new MySqlDataAdapter();
                selecionnar.SelectCommand = cmd;
                DataTable datosVentas = new DataTable();
                selecionnar.Fill(datosVentas);
                rowVenta = datosVentas.Rows[0];
                idVenta = Convert.ToInt32(rowVenta["idventa"]);

                //MessageBox.Show(Dt.Rows.Count.ToString());



                foreach (DataRow row in data.Rows)
                {
                    int cantidad = Convert.ToInt32(row["Cantidad"]);
                    decimal totalVenta = cantidad * Convert.ToDecimal(row["PrecioU"]);
                    string insertarQuery = "INSERT INTO ventasdetalle (idventa,cantidad,total,codigoBarras) " +
                        "VALUES(@idventa,@cantidad,@total,@codigo)";
                    MySqlCommand cmd2 = new MySqlCommand(insertarQuery, conexion);
                    cmd2.Parameters.AddWithValue("@idventa", idVenta);
                    cmd2.Parameters.AddWithValue("@cantidad", cantidad);
                    cmd2.Parameters.AddWithValue("@total", totalVenta);
                    cmd2.Parameters.AddWithValue("@codigo", row[1].ToString());
                    cmd2.ExecuteNonQuery();

                }



                Ticket Ticket1 = new Ticket();
                //Ticket1.AbreCajon();  //abre el cajon
                Ticket1.TextoCentro("GATO ABARROTERO");
                Ticket1.TextoCentro("Venta No." + idVenta);
                Ticket1.TextoCentro("FECHA:" + fecha);// imprime en el centro "Venta mostrador"
                Ticket1.LineasGuion(); // imprime una linea de guiones
                Ticket1.EncabezadoVenta(); // imprime encabezados
                foreach (DataRow row in data.Rows)
                {
                    int cantidad = Convert.ToInt32(row["Cantidad"]);
                    double totalVenta = cantidad * Convert.ToDouble(row["PrecioU"]);
                    String producto = row["Producto"].ToString();
                    double precio = Convert.ToDouble(row["PrecioU"]);
                    Ticket1.AgregaArticulo(producto, cantidad, precio, totalVenta); //imprime una linea de descripcion
                }

                Ticket1.LineasTotales(); // imprime linea

                Ticket1.AgregaTotales("Total", Convert.ToDouble(txtTotal.Text)); // imprime linea con total

                //Ticket1.CortaTicket(); // corta el ticket

                conexion.Close();


            }
            catch (MySqlException E)
            {
                MessageBox.Show(E.ToString());
            }






            cambio = Convert.ToDecimal(txtEfectivo.Text) - Convert.ToDecimal(txtTotal.Text);
            txtCambio.Text = Convert.ToString(cambio);

        }
        
        private void BtnCerrar_Click(object sender, EventArgs e)
        {
            frmPuntoVenta puntoVenta = new frmPuntoVenta();
            puntoVenta.Show();
            this.Hide();
        }
        
    }
}
 
 

Ahora nos vamos al formulario Menu.cs y copiamos un Button y en el texto ponemos Punto de Venta y lo nombramos btnPunto
punto de venta
Hacemos doble click sobre el botónPunto de venta
  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 GatoAbarrotero
{
    public partial class frmMenu : Form
    {
        public frmMenu()
        {
            InitializeComponent();
        }

        private void BtnProductos_Click(object sender, EventArgs e)
        {
            this.Hide();
            frmAgregarProducto agregarProdcuto = new frmAgregarProducto();
            agregarProdcuto.Show();

        }

        private void BtnCodigo_Click(object sender, EventArgs e)
        {
            this.Hide();
            frmCodigoBarras codigo = new frmCodigoBarras();
            codigo.Show();
        }

        private void BtnPunto_Click(object sender, EventArgs e)
        {
            this.Hide();
            frmPuntoVenta punto = new frmPuntoVenta();
            punto.Show();
        }
        
    }
}
  
  
  
  
  

Probando

Corremos la aplicación:
punto de venta
Escaneamos algunos productos:
punto de venta
Presionamos pagar
punto de venta
Nos pagan 500 pesos en efectivo y presionamos Cobrar
punto de venta
punto de venta
punto de venta
punto de venta

Conclusión

Tal vez te parezca complejo o sencillo realizar este punto de venta te suguiero que hagas pruebas pertinentes corrijas todos los errores sigue el proyecto paso a paso si me falto algo de publicar me pueden enviar un correo a kapo1978@hotmail.com con tus dudas. c# windows forms si es una herramienta potente para realizar aplicaciones de escritorio,si no puedes realizar el proyecto cuando terminemos el modulo reportes vamos a compartir el proyecto en github gracias a la gente que comparte su conocimiento gracias a ellos llegamos a esta instancias.