Jump to content

Visor de imágenes en visual .net


Recommended Posts

Muchachos, tengo un código donde un usuario carga una imágen o varias de , por ejemplo, un auto y el código la toma, la copia y la guarda en una carpeta aparte (pa ke no se borre si el usuario borra la imagen). En una base de datos sql server tengo una tabla que me guarda el ID de la imagen, la ruta donde está guardada y el id del auto asociado a la imagen

 

tengo un código de cómo hacer el visor de imágenes PERO aki viene el problema, el código SOLO toma las imágenes de una carpeta y las muestra, no hace nada más, el problema de esto es que me va a mostrar las imágenes de TODOS los autos, y yo solo quiero que me muestre de uno en específico, cómo podría hacer el código para eso?

 

 

 

lo otro, tengo un form que busca un cliente y debería mostrarlo en un datagrid como resultado de búsqueda, lo que yo quiero hacer es que el usuario seleccione el resultado mostrado en el datagrid y mediante un boton (boton editar por ejemplo) se abra otro form que me permita editarlo, esto se puede hacer desde el datagrid? o tendría que almacenar el resultado de la consulta en el boton para que al pincharlo, se abra el formulario con los datos llenos listos para editar?

 

 

gracias x la ayuda :)

Edited by ExtreemD4t4
Link to comment
Share on other sites

We need info...we need your code!! :tonto: ...napos, muestranos el código que tienes, capaz que sea super fácil adaptarlo para que muestre solo una basado en algo(un id de auto o algo) :tonto:

 

Saludos :krider:

Edited by AshWilliams
Link to comment
Share on other sites

mira, esto es lo que hace el boton agregar donde se abre el opendialog y copia la imagen a otra carpeta

Private Sub Agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Agregar.Click
        Dim openFileDialog1 As New OpenFileDialog()
        openFileDialog1.InitialDirectory = "C:\Documents and Settings\Equipo\Mis documentos\Mis imágenes"
        openFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|Bitmap Files (*)|*.bmp;*.gif;*.jpg|All files (*.*)|*.*"
        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            If Not Directory.Exists("C:\almacenamiento\imagenes") Then
                'Crea la carpeta
                Directory.CreateDirectory("C:\almacenamiento\imagenes")
                Dim ruta As String = Path.Combine("C:\almacenamiento\imagenes", Path.GetFileName(openFileDialog1.FileName))
                If Not File.Exists(ruta) Then
                    TxtRutaImagen.Text = Path.GetFileName(openFileDialog1.FileName) ' Obtengo el nombre del archivo
                    File.Copy(openFileDialog1.FileName, ruta)
                    ImgPicture.ImageLocation = ruta 'Esta es la ruta de mi directorio en mi aplicacion
                Else
                    MsgBox("La imagen que eligió ya existe, elija otra imagen por favor.")
                    ImgPicture.ImageLocation = "" 'Limpia el picturebox
                    Exit Sub 'obligo a que se salga
                End If
            Else
                Dim ruta As String = Path.Combine("C:\almacenamiento\imagenes", Path.GetFileName(openFileDialog1.FileName))
                If Not File.Exists(ruta) Then
                    TxtRutaImagen.Text = Path.GetFileName(openFileDialog1.FileName) ' Obtengo el nombre del archivo
                    File.Copy(openFileDialog1.FileName, ruta)
                    ImgPicture.ImageLocation = ruta 'Esta es la ruta de mi directorio en mi aplicacion
                Else
                    MsgBox("La imagen que eligió ya existe, elija otra imagen por favor.")
                    ImgPicture.ImageLocation = "" 'Limpia el picturebox
                    Exit Sub 'obligo a que se salga
                End If
            End If
        End If
    End Sub

lo que yo pienso es que debería hacer una consulta a la tabla imagenes y cargar en un , no se, datatable, la ruta de la imagen asociada al auto y mostrar Sólo esas imágenes, pero no sé como hacer la consulta ni como hacer pa que muestre solo las imagenes de ese auto

 

el código para el visor aun no lo hago pk lo saké de este video

pero tengo que adaptarlo todavía, pero es esa mas o menos la idea

 

Link to comment
Share on other sites

:mmm: ¿Estás seguro que es una aplicación web? Parece aplicación de escritorio. no%20se.gif

 

Por lo que veo, te basas en el nombre de archivo para saber si la imagen ya está o no. No sé si eso será buena idea, aunque depende de tu aplicación. En un disco podrías encontrar varios archivos con nombre "Sin título.jpg" en distintas carpetas, pero puede que todos sean diferentes (no son la misma imagen). Así que este detalle quizás te podría servir para asignarle un identificador a cada imagen, o sea, podrías usar un hash para saber si una imagen ya está en la carpeta de almacenamiento (y como nombre de archivo podrías usar el propio hash o algún GUID).

Link to comment
Share on other sites

ya resolví lo de los directorios xD, para hacerla mas facil hice que por cada registro se creara una carpeta, y dentro de cada carpeta van las imagenes xD, total despues las agarro todas desde esa carpeta y las muestro no mas :B

 

 

alguien me puede ayudar con la segunda parte? xD

Link to comment
Share on other sites

[hide]

Si usas un DataGridView para mostrar los resultados de una búsqueda, puedes permitir que el usuario modifique los valores de las casillas en el propio DataGridView y, de ser necesario, puedes especificar que algunas columnas sean de sólo lectura. También deberías desactivar la opción de agregar filas a la tabla.

La idea es más o menos así:

 

dbform1.png

En el siguiente ejemplo en ninguna parte se llama al método LlenarDataGridView, así que tienes que agregar esa parte. Por si acaso, a LlenarDataGridView le pasas la cadena con la consulta SQL que quieres usar para llenar el DataGridView, pero si por razones de seguridad necesitas usar un SqlCommand en vez de una cadena, entonces puedes usar esta sobrecarga del constructor de SqlDataAdapter y hacer las respectivas modificaciones a LlenarDataGridView.

 

Private fuenteDatos As New BindingSource()
Private adaptadorDatos As New SqlDataAdapter()

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    DataGridView1.DataSource = fuenteDatos
    btnGuardar.Enabled = False
End Sub

Private Sub LlenarDataGridView(ByVal consulta As String)
    Try
        cn.Open()
        adaptadorDatos = New SqlDataAdapter(consulta, cn)
        Dim cmdBuilder As New SqlCommandBuilder(adaptadorDatos)
        Dim tabla As New DataTable()
        adaptadorDatos.Fill(tabla)
        fuenteDatos.DataSource = tabla
        DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader)
    Catch exp As Exception
        MessageBox.Show(exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Finally
        cn.Close()
    End Try
End Sub

Private Sub btnGuardar_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardar.Click
    If Not fuenteDatos.DataSource Is Nothing Then
        adaptadorDatos.Update(CType(fuenteDatos.DataSource, DataTable))
    End If
End Sub

Private Sub btnCancelar_Click(sender As System.Object, e As System.EventArgs) Handles btnCancelar.Click
    Me.Close()
End Sub

Private Sub DataGridView1_CellValueChanged(sender As System.Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
    btnGuardar.Enabled = True
End Sub
Se supone que la variable cn es de tipo SqlConnection.

 

Quizás también te interese el evento CellValidating.

[/hide]

Link to comment
Share on other sites

Genial!, otra duda..

tengo una opcion que permite activar el login de usuario dentro del formulario principal, y tengo un formulario para el login, el proyecto parte con el menu principal y dentro está la opcion para activar o desactivar el login

 

como se puede hacer para que al activar el login, el programa parta con el form de login? en vez del con menu principal?

Link to comment
Share on other sites

:mmm:

[hide]

ACLARACIÓN: Por lo que entiendo, tú necesitas que se muestre el formulario de login antes de mostrarse cualquier otro formulario, y una vez que el usuario haya sido validado, recién entonces mostrar el formulario principal.

Yo lo hice usando un formulario propio, pero supongo que también debería funcionar con el Formulario de inicio de sesión que se incluye en el Visual Studio.

 

El formulario para iniciar sesión que usé como ejemplo se ve así:

 

usrlg7d4.png

Y el código fuente es:

Public Class FormLogin
    Private _LoginExitoso As Boolean = False

    Friend ReadOnly Property LoginExitoso As Boolean
        Get
            Return _LoginExitoso
        End Get
    End Property

    Private Sub btnDentrar_Click(sender As System.Object, e As System.EventArgs) Handles btnDentrar.Click
        If txtUsuario.Text = "jefe" And txtPassword.Text = "clave" Then
            _LoginExitoso = True
            Me.Close()
        Else
            txtPassword.Text = ""
            MessageBox.Show("No te conozco", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub

    Private Sub btnSalir_Click(sender As System.Object, e As System.EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub
End Class
Obviamente, tú tienes que hacer una validación de verdad del usuario (la del ejemplo es entera mula :tonto: ). Además deberías hacer que el formulario quede centrado en la pantalla y asignar las propiedades AcceptButton y CancelButton a los respectivos botones del formulario.

 


Para poder elegir qué formulario quieres cargar al momento de iniciar la aplicación, tienes que agregar un módulo a tu proyecto:

  • Proyecto > Agregar módulo...
  • Lo guardas con el nombre que se te antoje
Este nuevo módulo debe verse más o menos así:

Module ModuloInicial
    <STAThread()>
    Friend Sub Main()
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)

        Dim ingresar As Boolean = True

        If System.IO.File.Exists("login.txt") Then
            Dim frm As New FormLogin()
            Application.Run(frm)
            ingresar = frm.LoginExitoso
        End If

        If ingresar Then
            Application.Run(New Form1())
        End If
    End Sub
End Module
Ojo, este es un ejemplo burdo, se basa en la existencia de un archivo para saber si hay que mostrar el formulario de inicio de sesión (¡no se te ocurra hacerlo así! :tonto: ).

 

Ahora necesitas indicarle a Visual Studio que no quieres usar un formulario principal, sino que quieres especificar un punto de entrada a tu aplicación. Para eso tienes que modificar las propiedades de tu proyecto: en el menú Proyecto selecciona Propiedades de <nombre_de_tu_proyecto>...:

  • Selecciona la pestaña Aplicación
  • Desactiva la casilla que dice Habilitar marco de trabajo de la aplicación
  • Al descativar esta casilla, la lista desplegable Formulario de inicio pasa a llamarse Objeto de inicio, en ésta selecciona Sub Main

appcfg.png

con esto logras que tu aplicación ejecute el Sub Main que está en el módulo que agregaste previamente (y éste es el que se encarga de decidir qué formulario se carga al inicio de la aplicación).

[/hide]

Edited by susodicho
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...