Mostrando entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando entradas con la etiqueta C#. Mostrar todas las entradas

lunes, 16 de marzo de 2020

VSView 8.0 C# mostrar número total de paginas


Este ejemplo muestra dos métodos para obtener encabezados que indican el número total de páginas en el documento.

Método 1: dos pases
Este método es simple y adecuado para documentos cortos. Consiste en crear el documento dos veces: una vez solo para contar las páginas y una vez para crear el documento completo.

  
vp.Header = "Página " + x+ " de " + vp.PageCount;
vp.StartDoc();

// Creamos el documento

vp.EndDoc();

vp.Header = "Página " + x+ " de " + vp.PageCount;
vp.StartDoc();

// Creamos el documento

vp.EndDoc();

Método 2: pase único
Este método utiliza superposiciones para realizar las mismas tareas en una sola pasada. Los encabezados se dibujan en cada página. Después de que se complete el documento.
  
vp.StartDoc();
// Creamos el documento
vp.EndDoc();

for (int x=1; x < vp.PageCount; x++)
{
   vp.StartOverlay((short)x, true);
   vp.TextAlign = VSPrinter8Lib.TextAlignSettings.taRightTop;
   vp.CurrentX = vp.MarginHeader;
   vp.FontName =  "Times New Roman";
   vp.FontSize = (float)8;
   vp.TextRTF = @"Página " + x+ " de " + vp.PageCount;
   vp.EndOverlay();
}

jueves, 19 de febrero de 2015

C# Generar XML listado archivos



A continuación vamos realizar un programa para generar un XML que contendrá todos los archivos del árbol de directorios de una ruta que especifiquemos. Lo primero vamos a realizar la parte grafica quedando de la siguiente manera la interfaz.


Como se ve la interfaz es bastante simple contaremos de la parte superior donde pondremos la ruta desde donde se comenzara  a leer para generar el XML y la parte inferior tendremos en botón desde donde lanzaremos la acción y también tenemos un check para marcar si deseamos que en el XML también se incluyan los subdirectorios. También vemos que hemos añadido un “folderBrowserDialog “para poder así también seleccionar nuestro directorio.
Vamos comenzar con el botón del evento “click” del botón “Examinar” desde el cual podremos elegir una ruta.


        private void btoExaminar_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowDialog();
            txtRuta.Text = folderBrowserDialog1.SelectedPath;

        }

Bueno lo único que realizamos aquí es mostrar nuestro “openFileDialog” para mostrar la ventana para elegir nuestro directorio.

Ahora vamos a los realmente importante la función que va generar el XML.

        private void generaXML(string ruta, bool subDir)
        {

            // Inicilizamos en XML
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = ("    ");
            writer = XmlWriter.Create("Listado.xml");

            // XML
            System.IO.DirectoryInfo Directorio = new DirectoryInfo(txtRuta.Text);
            writer.WriteStartElement("arbol");
            // Función para recorrer todo el arbol
            RecorreArbol(Directorio, true);
            writer.WriteEndElement();
            writer.Flush();
            writer.Close();
           
            // Mensaje finalizacion
            MessageBox.Show("Completado!");
        }


Y el procedimiento para recorrer el árbol.


        private void RecorreArbol(System.IO.DirectoryInfo directorio, bool subDirectorios)
        {
            System.IO.FileInfo[] files = null;
            System.IO.DirectoryInfo[] subDirs = null;

            // Obtenemos todos los archivos que se encuentra en directorio
            try
            {
                files = directorio.GetFiles("*.*");
            }
            // En caso de error
            catch (Exception e)
            {
                MessageBox.Show("Error: " + e.Message);
            }

            // Si tenemos ficheros los recorremos y los agregamos a nuestro XML
            if (files != null)
            {
               
                foreach (System.IO.FileInfo fi in files)
                {
                    writer.WriteStartElement("archivo");
                    writer.WriteElementString("nombre", fi.Name.ToString());
                    writer.WriteElementString("tamaño", fi.Length.ToString());
                    writer.WriteElementString("utimoAcceso", fi.LastAccessTime.ToString());
                    writer.WriteElementString("fechaCreacion", fi.CreationTime.ToString());
                    writer.WriteEndElement();

                }


                // Solo si lo tenemos activado
                if (subDirectorios)
                {
                    // Buscamos si tiene subdirectorios
                    subDirs = directorio.GetDirectories();

                    foreach (System.IO.DirectoryInfo dirInfo in subDirs)
                    {
                        // LLamada Recursiva
                        RecorreArbol(dirInfo, subDirectorios);
                    }
                }
            }
        }

Aquí tenéis un ejemplo de XML que genera.



Nota: Podéis descargar el proyecto desde aquí




jueves, 17 de enero de 2013

C# Ejemplo de comunicación entre procesos mediante PIPE


Vale como ejemplo crearemos dos aplicaciones a modo de que una será una servidor en el que podremos redactar mensajes que se enviaran a los clientes. Y la otra será la aplicación cliente que recibirá estos mensajes.

Empecemos creando la interfaz visual que tendrá la aplicación que hará de servidor. Y es mi caso tendrá un aspecto visual como este.



Ahora nos iremos al evento Click() de nuestro botón. Que será una cosa parecida a esto:

        private void btoEnviar_Click(object sender, EventArgs e)
        {

        }

Para empezar a utilizar PIPE lo primero que tendremos que hacer es agregar el espacio de nombre que contienen estos objetos para ello tendremos agregar el espacio de nombre “System.IO.Pipes”.
El objeto que vamos a utilizar para realizar el envió se llama “NamedPipeClientStream” el código de nuestro programa servidor quedaría así:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Pipes;

namespace ServidorPIPE
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btoEnviar_Click(object sender, EventArgs e)
        {

                var ServidorEnvio = new NamedPipeClientStream("ServerPIPE");

                // Para conectar con el servidor PIPE
                // que va ser nuestro cliente que esta escuchando
                ServidorEnvio.Connect(60);

                // Creamos un buffer y le paso el valor de nuestro textbox
                byte[] buffer = ASCIIEncoding.ASCII.GetBytes(txtMensaje.Text);

                // Lo enviamos
                ServidorEnvio.Write(buffer, 0, buffer.Length);

                ServidorEnvio.Close();
        }
    }
}


Ahora realizaremos el que va ser nuestro cliente una captura de la interfaz.




Ahora el código para nuestro cliente que recibirá los mensajes:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Pipes;

namespace ClientePIPE
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            while (true)
            {
                var ClientePIPE = new NamedPipeServerStream("ServerPIPE");

                // Bucle para esperar respuestas
                ClientePIPE.WaitForConnection();

                byte[] buffer = new byte[255];
                ClientePIPE.Read(buffer, 0, 255);

                // Se asigna el valor
                txtMensaje.Text = ASCIIEncoding.ASCII.GetString(buffer);

                // Refresca los datos
                Refresh();

                ClientePIPE.Close();
            }
        }
    }
}


Un video del ejemplo funcionando.


Un saludo.