Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rulovive

#1
hola nenes. actualizo el tema para notificar que ya lo he solucionado... el error estaba en el codigo del boton, no del bucle. Sucede que el printpreviewdialog y el printdialog disparaban ambos el printdocument, por lo que toda la informacion se perdia o se ciclaba, no lo se y no me interesa... el caso es que al eliminar el codigo para printpreview todo funcionó como debia....
me dan lastima y asco xD... pero para su escarmiento no pueden borrar esta respuesta porque en ella se encuentra la solución, y junto con ella el insulto hacia ustedes xd
#2
Buen dia... como siempre son mi ultimo recurso porque agoté todas las posibilidades e ideas que tengo... la cosa es asi:

Quiero imprimir un reporte de n numero de registros por edio de una pulsacion de boton (anexo codigo):
pagina = 1; //al pulsar el boton el contador de paginas inicia siempre en 1
           vuelta = 0; //al pulsar el boton siempre establezco empezar a leer en la linea 0

           PrintDialog printdialog1 = new PrintDialog();//instancia nueva para crear un dialogo de impresion
           printdialog1.Document = printDocument1;//se asigna la relacion con el documento a imprimir
           DialogResult result = printdialog1.ShowDialog();//se asigna el resultado de la seleccion del dialogo en la variable result


           // ESTO QUE VIENE AQUI EN VERDE ES PARA OBTENER UNA VISTA PREVIA DEL DOCUMENTO A IMPRIMIR...
           PrintPreviewDialog ppd = new PrintPreviewDialog { Document = printDocument1 }; //<-------creamos un nuevo dialogo preview de impresion
           ((Form)ppd).WindowState = FormWindowState.Maximized;
           ppd.ShowDialog();     //<----------sirve para mostrar el preview de la impresion    


           if (result == DialogResult.OK)
              printDocument1.Print();


esa parte funciona a la perfeccion... ahora anexo dos codigos que tienen que ver con las impresiones en el printdocument1, el primero es con un ciclo while:
while (vuelta < dataGridView1.RowCount)
           {
               
               
               e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[0].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x, y + 154);
               e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[1].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x + 260, y + 154);
               e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[2].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x + 620, y + 154);
               vuelta++;
               y += 35;
               if (y >= printDocument1.DefaultPageSettings.Bounds.Height - 300)
               {

                   y = printDocument1.DefaultPageSettings.Bounds.Y + 154;
                   e.HasMorePages = true;
                   pagina++;

                   break;
               }
           }

el cual simplemente imprime el listado de lo que hay en el reporte con el siguiente resultado:

es decir.... se obtiene lo que se busca sin problema... aparentemente, ya que cuando imprimo fisicamente las hojas... me aparece asi:

es decir.... solo me aparecen las cabeceras y pie de pagina!! (para lo cual hay un codigo tmb, pero no lo anexé porque con ese no hay problema)

despues de eso intenté hacer el mismo codigo pero evitando el uso del while,asi que puse un bucle foreach en vez de while, ya que descubri que con foreach si me lo imprime fisicamente... anexo codigo
foreach (DataGridViewRow renglon in dataGridView1.Rows)
           {
               
               if (renglon.Index == dataGridView1.RowCount)
                   break;
               if (y >= printDocument1.DefaultPageSettings.Bounds.Height - 300)
               {

                 
                   e.HasMorePages = true;
                   pagina++;

                   break;
               }

               foreach (DataGridViewCell celda in renglon.Cells)
               {
                   e.Graphics.DrawString(celda.Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x, y + 154);
                   x += 300;
               }
               x = e.MarginBounds.Left + 5;
               y += 35;


y aunque este codigo si que funciona -ignoro porque el foreach si imprime el listado y el while no, a pesar de que en la previsualizacion si se ve el listado-, el problema con este pedazo de codigo es que si el reporte es de mas de una pagina, entra en un cliclo infinito ya que cuando se dispara de nueva cuenta el printdocument debido al e.hasmorepages=true, el contador del foreach del renglon se vuelve a posicionar a 0... y nunca termina de leer todos los registros, y tengo entendido que al foreach no se le puede asignar un valor inicial a sus variables... por lo que no me sirve.....
ya intenté poner un for en vez del foreach pero sucede exactamente lo mismo que con el while...
los codigos son exactamente los mismos, aplicados a su correspondiente bucle, pero no entiendo porque el while no funciona!!! alguien me puede ayudar? se supone que si el reporte lo guardara como un pdf, se guardaria con todo y sus registros asi como en la imagen, pero yo quiero imprimirlo fisicamente :s
#3
Cita de: K-YreX en 14 Abril 2021, 20:36 PM
El problema supongo que viene de lo siguiente. Tú estás haciendo esto con el segundo parámetro:
x = DateTime.Now -> Devuélveme la fecha/hora actual
y = x.ToShortDateString() -> Conviértelo a cadena de texto en formato fecha
DateTime.Parse(y) -> Convierte esa cadena con la fecha a formato fecha/hora

Es decir que en el último paso, al volver a convertirlo a tipo DateTime estás volviendo a tener la hora (pero no la que tenías porque la has desechado en el paso 2, sino la hora por defecto).

Si lo tienes todo enlazado y no puedes modificar los datos antes de mostrarlos, ahora mismo no se me ocurre cómo hacerlo. En cambio, si puedes tratar los datos antes de mostrarlos, deberías recuperar la fecha/hora de la BD y mostrarla en el datagridview convertida a cadena de texto con la fecha. Es decir guardas la fecha/hora actual (paso 1) y el paso 2 lo realizas al momento de mostrar, no de guardar.

Voy entendiendo... pero... el datagridview donde se muestra esa info es solo un "contenedor" que jala lo que está guardado en la bd de access. Y de hecho tmb está configurada para que en esa columna  los datos se muestren con formato en fecha  corta... básicamente me dices que cree un bucle que lea cada registro de esa columna para que tome el dato fecha y lo muestre en formato string? Ósea "oculte" el dato verdadero y mostrar uno en otro formato?
#4
Hola hermosos... me han sacado de muchas dudas y esta es una que a simple vista deberia de parecer sencilla pero no doy...

resulta que tengo una bd en access con una tabla en donde una columna esta definida con el formato fecha/hora, y configurada para que aparezca con fecha corta (al estilo 01/01/2021)... todo bien

luego en visual studio c# tengo un sistema visual con un datagridview enlazado a un dataset enlazado a la tabla anteriormente mencionada.
Dicho datagridview -en la columna correspondiente a fecha- esta definida como una columna con formato de fecha corta (o "d", que es como se le define a ese formato).

a la hora de guardar el registro utilizo el siguiente codigo:
inventario.registraticket(label9.Text, DateTime.Parse(DateTime.Now.ToShortDateString()),DateTime.Now.ToShortTimeString(), totalizando().ToString());
en donde el primer parametro es el numero de ticket, el segundo parametro es la fecha corta en formato string convertido a un tipo Datetime, el tercer parametro es la hora, y el ultimo parametro es un total, en su correspondiente columna cada parametro... se supone que estoy guardando todo como debe de ser, pero esta mugre columna en el datagridview se aferra a salir de la siguiente forma:
Citar01/01/2021 12:00:00 a.m.
y no se porque rayos me sale con todo y la hora!!
la unca forma en la que pude lograrlo fue que en la bd de access la cilumna fecha era de tipo texto... pero eso me dificulta mucho hacer comparaciones de fecha en mi sistema... alguna pista?
#5


imagenes de izquierda a derecha... a ver si con esto se entiende mejor
#6
a ver pongo el codigo... la cosa es asi. estoy haciendo un libro de citas, entonces cada picturebox es una "etiqueta", que indica qe un espacio esta reservado para cita, entonces van a estar varios boxes en el libro, y solo cuando cancelen una cita se elimina el picture box que le corresponde, entonces el propietaro deberia recorrer los demas horarios para eliminar el tiempo muerto, pero el evento mouse_up (que funciona haciendo que cuando el raton suelte el objeto, se acomode de manera automatica en el lugar correspondiente a cierto horario -es decir, que la etiqueta se acomode a las 5:30, y no a las 5:12:24) ya no funciona, y hace que el usuario tenga que estar contando las marquitas de los minutos hasta que le atine a las 5:30... pongo el codigo completo:

Código (csharp) [Seleccionar]
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 airline
{
    public partial class Form1 : Form
    { public PictureBox jalador;
        public string hora, notas;
        public bool cita = false;

       
        public Form1()
        {
            InitializeComponent();
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            Form Form2 = new Form2();
            Form2.Owner = this;
            Form2.ShowDialog(this);
           


           
           
        }

        private void Jalador_MouseEnter(object sender, EventArgs e)
        {
            jalador.Cursor = Cursors.Hand;     
        }

        private void pictureBox2_MouseEnter(object sender, EventArgs e)
        {
            pictureBox2.Height = 32;
            pictureBox2.Width = 74;
        }

        private void pictureBox2_MouseLeave(object sender, EventArgs e)
        {
            pictureBox2.Height = 30;
            pictureBox2.Width = 72;
        }

        private void pictureBox3_MouseEnter(object sender, EventArgs e)
        {
            pictureBox3.Height = 32;
            pictureBox3.Width = 73;
        }

        private void pictureBox3_MouseLeave(object sender, EventArgs e)
        {
            pictureBox3.Height = 30;
            pictureBox3.Width = 71;
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {

           
        }

        private void Boton_Click(object sender, EventArgs e)
        {
            MessageBox.Show("hola");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (cita == true)
            { jalador = new PictureBox();
                    jalador.Location = new System.Drawing.Point(450, 450);
                    //de 25 en 25 cada media hora, y el 38 es siempre igual
                    jalador.SizeMode = PictureBoxSizeMode.AutoSize;

                if (hora == "0:30")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jalador.png");
                if (hora == "1:00")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladoruna.png");
                if (hora == "1:30")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladorunaymedia.png");
                if (hora == "2:00")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladordos.png");             
                if (hora == "2:30")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladordosymedia.png");
                if (hora == "3:00")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladortres.png");
                if (hora == "3:30")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladortresymedia.png");           
                if (hora == "4:00")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladorcuatro.png");             
                if (hora == "4:30")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladorcuatroymedia.png");             
                if (hora == "5:00")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladorcinco.png");             
                if (hora == "5:30")
                    jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladorcincoymedia.png");
                if (hora == "6:00")
                   jalador.Image = Image.FromFile(@"C:\Users\Constructora\Desktop\res\jaladorseis.png");
                 
                Controls.Add(jalador);
                jalador.Visible = true;
                jalador.BringToFront();
                ControlExtension.Draggable(jalador, true);
                jalador.LocationChanged += Jalador_LocationChanged1;
                jalador.MouseUp += Jalador_MouseUp;
                jalador.MouseEnter += Jalador_MouseEnter1;
                cita = false;
            }
        }

        private void Jalador_MouseEnter1(object sender, EventArgs e)
        {
            // Create the ToolTip and associate with the Form container.
            ToolTip toolTip1 = new ToolTip();

            // Set up the delays for the ToolTip.
            toolTip1.AutoPopDelay = 5000;
            toolTip1.InitialDelay = 500;
            toolTip1.ReshowDelay = 500;
            // Force the ToolTip text to be displayed whether or not the form is active.
            toolTip1.ShowAlways = true;

            // Set up the ToolTip text for the Button and Checkbox.
            toolTip1.SetToolTip(this.jalador ,"~~Datos de la cita~~\n Duración estimada del servicio: "+ hora+"\n Detalles: "+notas);
           
        }

        private void Jalador_MouseUp(object sender, MouseEventArgs e)
        {
            if (jalador.Location.X <= 171)
                jalador.Left = 145;
            if (jalador.Location.X > 171 && jalador.Location.X <= 225)
                jalador.Left = 200;
            if (jalador.Location.X > 225 && jalador.Location.X <= 280)
                jalador.Left = 255;
            if (jalador.Location.X > 280 && jalador.Location.X <= 335)
                jalador.Left = 310;
            if (jalador.Location.X > 335 && jalador.Location.X <= 390)
                jalador.Left = 365;
            if (jalador.Location.X > 390 && jalador.Location.X <= 445)
                jalador.Left = 420;
            if (jalador.Location.X > 445 && jalador.Location.X <= 500)
                jalador.Left = 475;
            if (jalador.Location.X > 500 && jalador.Location.X <= 555)
                jalador.Left = 530;
            if (jalador.Location.X > 555 && jalador.Location.X <= 610)
                jalador.Left = 585;
            if (jalador.Location.X > 610 && jalador.Location.X <= 665)
                jalador.Left = 640;
            if (jalador.Location.X > 665 && jalador.Location.X <= 720)
                jalador.Left = 695;
            if (jalador.Location.X > 720)
                jalador.Left = 750;

            if (jalador.Location.Y <= 180)
                jalador.Top = 166;
            if (jalador.Location.Y > 180 && jalador.Location.Y <= 225)
                jalador.Top = 204;
            if (jalador.Location.Y > 225 && jalador.Location.Y <= 260)
                jalador.Top = 242;
            if (jalador.Location.Y > 260 && jalador.Location.Y <= 300)
                jalador.Top = 280;
            if (jalador.Location.Y > 300 && jalador.Location.Y <= 340)
                jalador.Top = 318;
            if (jalador.Location.Y > 340 && jalador.Location.Y <=375 )
                jalador.Top = 356;
            if (jalador.Location.Y > 375)
                jalador.Top = 394;



        }

        private void Jalador_LocationChanged1(object sender, EventArgs e)
        {
            label2.Text = (jalador.Location.X + "," + jalador.Location.Y);
           
        }

   

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            label1.Text = (Cursor.Position.X + "," + Cursor.Position.Y);
        }

     

    }
}



entonces ahi el problema es que si yo tengo 5 citas, y me cancelan la segunda, elimino ese picturebox que corresponde a la segunda cita, pero el evento que inicia en la linea 138 ya no sirve, salvo para el picture box mas reciente...
#7
Buenas gente. tengo una form donde me da la necesidad de crear controles de forma dinamica (especificamente son picture boxes que contienen datos para acomodarlos en ciertos espacios en mi form), pero son varias veces las que creo un control y lo manipulo y lo muevo. el problema es que cuando tengo uno creado y creo otro nuevo, los eventos creados de forma dinamica para el control solo se aplican al mas reciente creado, y el anterior pierde la capacidad de manejarse con los eventos creados dinamicamente... ejemplo:

crear picturebox nuevo;
crear evento dinamico mouse up; <-- Evento que me da problema


Se supone que este evento consiste simplemente en que cuando suelto el raton despues de arrastrarel objeto, me lo acomoda en cierta area del form automaticamente, y lo hace tantas veces como yo quiera... pero si lo acomodo y creo otro control igual, el evento pasa a funcionar solamente para el cntrol mas reciente que se creó, y si arrastro y suelto el boton del control creado en primer lugar, ya no funciona el evento... y creo que es porque de cierta manera "caducó", ya que existe un control creado de manera mas reciente.... como puedo arreglar esto?
#8
Cita de: engel lex en 29 Enero 2018, 20:16 PM
no... es que no estás viendo el escenario completo... si el router tiene 192.168.1.1 mascara /24 entonces para el no son 3 redes es una... y para las subredes no les importa donde esté el gateway siempre y cuando esté a 1 salto

ahhh ya te entendi... pero esa solucion no aplica si mis subredes tienen una mascara de red distinta. mis mascaras de red tienen que ajustarse a la cantidad de usuarios que les voy a dar para que no haya desperdicio de ip. por decir una mascara me salio en .252, otra en .128 y asi
#9
Cita de: engel lex en 29 Enero 2018, 19:17 PM
así mismo, es una sola puerta de enlace... solo que en el router su subred es mayor... es decir

si las subredes son

192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
192.168.4.0/24


y el router es 192.168.1.1, entonces en su configuración su subred es 192.168.1.1/21 así ocupará las 4 redes que necesitas... y para todas el gateway siempre será .1.1
entonces para que se define una puerta de enlace para cada subred?
en mi ejemplo seria una subred desde

192.168.1.0 - 192.168.1.135
192.168.1.136 - 192.168.1.200
192.168.1.201 - 192.168.1.250

entonces el router tiene asignada la 192.168.1.1
funciona para todas las subredes? como funciona si se supone que ese gateway incluye solo la primera subred?

#10
no te vayasss. ahora si la ves?