SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => VB .NET => Mensaje iniciado por: Cajami en Martes 12 de Junio de 2007, 19:25

Título: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Cajami en Martes 12 de Junio de 2007, 19:25
Hola, tengo un problema con el DataGridView, como puedo hacer para que cuando le de clic a una celda específica me aparezca un panel en la esquina de esa celda, no se como sacar las coordenas X y Y para colocarlo en esa posición, adjunto una imagen para que se den cuenta que es lo que quiero hacer, espero me hayan entendido, de antemano muchas gracias no vemos
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: ElNapster en Martes 12 de Junio de 2007, 19:35
Ummm tendrias que sacar como primer paso las coordenadas de la celda (el ancho) por si al user se le da por estirar la celda o ya vos la dejar no modificable ... luego al panel le das como primera coordenada la posicion (ancho) de la celda seleccionada.... en este momento no tengo el vb.net en esta maquina asi que solo puro concepto te estoy dando  :P me imagino que debes de jugar con el top del panel....  :ph34r:

Saludos...  :comp:
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Cajami en Martes 12 de Junio de 2007, 19:50
Hola, la verdad que toy perdido en esta parte, mira este codigo:

Código: Text
  1.     Private Sub DataGridView1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
  2.         If e.ColumnIndex = 0 And e.RowIndex = 0 Then
  3.             Dim X As Integer = Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex).Size.Width
  4.             Dim Y As Integer = Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex).Size.Height
  5.             Me.Mostrar_Datos.Location = New Point(X, Y)
  6.             Me.Mostrar_Datos.Visible = True
  7.         Else
  8.             Me.Mostrar_Datos.Visible = False
  9.         End If
  10.     End Sub
  11.  

Se que está mal ps el Height no debería ir (digo io), no se coloca el panel donde quiero, alguna sugerencia???
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: ElNapster en Martes 12 de Junio de 2007, 20:30
Cajami te pongo un ejemplin que se me acaba de ocurrir solo lo tenes que implementar a tu datagridview:


Código: Text
  1. Dim xpos,ypos as integer
  2.  
  3. xpos = me.text1.location.x + me.text1.width
  4. ypos = me.text1.location.y + 25 ' ya que queremos que este en la esquina del textbox bueno este ejemplo jajaja
  5.  
  6. me.mostrar_datos.location = new system.drawing.point (xpos,ypos)
  7.  


este lo que hacer es poner el panel en la esquina de un textbox .. pero ya vos le sacas las coordenadas a tu datagridview....

Bueno espero te sirva de ayuda

Exitos !!!!!  :hola:
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Cajami en Martes 12 de Junio de 2007, 20:45
Hola, pero el hecho es que no se como sacar las coordenadas de una celda, trato de encontrar el location y naa, tal vez estaré mal en algun sitio :'(
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Bigpercynet en Martes 12 de Junio de 2007, 23:50
Hola a todos,

Espero que estos les sea de utilidad. Realiza precisamente lo que buscais. Para obtener los valores del location de cualquier celda, simplemente lo que se hace es sumar cada uno de los valores de las propiedades left y top tanto del dataGridView como de las celdas adyacentes a la celda selecionada (incluye esta).


 
Apreciad el codigo:

 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int  x_i=e.ColumnIndex;
            int y_i= e.RowIndex;
            Text = e.ColumnIndex.ToString();
            int margenX = 0;
            int margenY = 0;

            int margenXdataGridView = dataGridView1.Left;
            int margenYdataGridView = dataGridView1.Top;

       
            for (int i = 0; i <= e.ColumnIndex + 1; i++)
            {
             
                DataGridViewCell cell =dataGridView1.Rows[e.RowIndex].Cells;
                dataGridView1.CurrentCell = cell;
                margenX += dataGridView1.CurrentCell.Size.Width;
               
            }

            for (int i = 0; i <= e.RowIndex + 1; i++)
            {
                DataGridViewCell cell2 = dataGridView1.Rows.Cells[e.ColumnIndex];
                dataGridView1.CurrentCell =cell2;
                margenY += dataGridView1.CurrentCell.Size.Height;
            }

            int left = 0;
            int top = 0;

            left = margenXdataGridView +  margenX;
            top = margenYdataGridView + margenY;

            checkBox1.Location = new Point(left - 60, top + 10);

            DataGridViewCell cell3 = dataGridView1.Rows[x_i].Cells[y_i];
            dataGridView1.CurrentCell = cell3;
           
           
        }

Saludos,
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Bigpercynet en Martes 12 de Junio de 2007, 23:53
Hola de nuevo, solo queria decirles que el codigo en VB .NET es similar, para esta vez, solo hay que quitarles agregados como punto y comas, llaves... eso nada mas


Saludos,

Percy Reyes,
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Cajami en Miércoles 13 de Junio de 2007, 16:48
Hola, muchisimas gracias Bigpercynet y ElNapster, me salió aqui está el codigo en VB.Net, le he borrado algunas lineas :D :

Código: Text
  1.     Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
  2.         If e.ColumnIndex = 0 Then
  3.             Dim x_i As Integer = e.ColumnIndex
  4.             Dim y_i As Integer = e.RowIndex
  5.             Dim margenX As Integer = 0
  6.             Dim margenY As Integer = 0
  7.             Dim margenXdataGridView As Integer = DataGridView1.Left
  8.             Dim margenYdataGridView As Integer = DataGridView1.Top
  9.  
  10.             For I As Integer = 0 To e.ColumnIndex + 1
  11.                 margenX += DataGridView1.CurrentCell.Size.Width
  12.             Next
  13.  
  14.             For I As Integer = 0 To e.RowIndex + 1
  15.                 margenY += DataGridView1.CurrentCell.Size.Height
  16.             Next
  17.  
  18.             Dim left As Integer = 0
  19.             Dim top As Integer = 0
  20.  
  21.             left = margenXdataGridView + margenX
  22.             top = margenYdataGridView + margenY
  23.  
  24.             Me.Mostrar_Datos.Visible = True
  25.             Me.Mostrar_Datos.Location = New Point(left - 58, top)
  26.         End If
  27.     End Sub
  28.  

Ahora se me ha metido algo en la mente, que pasa o mejor dicho si el dataGridView llega hasta el final del formulario y ps si uno hace clic en el ultimo formulario aparece en mi caso el panel no se ve todo osea o hacer para que si el panel no se mostrara todo que suba hasta que se muestre todo, adjunto una imagen para que se den cuenta
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Cajami en Miércoles 13 de Junio de 2007, 17:21
Hola, osea como hacer esto, vean la imagen, nos vemos  :hola:
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: Nebire en Lunes 2 de Julio de 2007, 09:45
En otro mensaje donde te mandé un ejemplo ya aparece como obtener la posición del ratón... pero vamos a lo que solicitas...

Antes de mostrar el panel, debes calcular si cabe o no, es decir tomando la posición a colocar y sumando el tamaño del panel debes saber si es mayor que el tamaño del formulario, si es menor, perfecto, lo pintas, y si es mayor entonces debes restar el tamaño del panel y el tamaño de la celda.

Nota que debes hacer por separado el 'top' y el 'left'.

Saludos.
Título: Re: Aparecer Un Panel En Determinadas Coordenadas
Publicado por: jr0driguezv en Martes 10 de Octubre de 2017, 22:52
En otro mensaje donde te mandé un ejemplo ya aparece como obtener la posición del ratón... pero vamos a lo que solicitas...

Antes de mostrar el panel, debes calcular si cabe o no, es decir tomando la posición a colocar y sumando el tamaño del panel debes saber si es mayor que el tamaño del formulario, si es menor, perfecto, lo pintas, y si es mayor entonces debes restar el tamaño del panel y el tamaño de la celda.

Nota que debes hacer por separado el 'top' y el 'left'.

Saludos.


Saludos, como hacer esto?  tambien necesito algo semejante por favor ayuda