none
Cambiar Imagenes por estados RRS feed

  • Pregunta

  • Hola a todos

    habia creado una pregunta pero la plantee mal,  aqui voy de nuevo espero esta vez me entiendan. 

    estoy realizando un programa que tiene muchos picturebox al rededor de 60, necesito hacer un filtro a cada imagen al mismo tiempo, dependiendo de su estado en una hora y fecha especifica. Creo que es algo difícil de hacer pero me imagino que no imposible, pero para eso necesito de su ayuda. Tengo un código y quiero que me digan si voy bien encaminado o si lo que estoy haciendo esta mal, o si simplemente no se puede hacer. 

    La estructura de la base de datos es esta:   "ID", "Fecha", "Nombre", "IdEstadoValvula", "IdEstadoFalla"

     Private Sub BtnBuscar_Click(sender As System.Object, e As System.EventArgs) Handles BtnBuscar.Click
            Dim fecha As DateTime = DtpFechaIni.Value.Date
            Dim hora As DateTime = CDate(DtpHoraIni.Value.ToString)
            Dim fechaHoraIni As New DateTime(
                fecha.Year, fecha.Month, fecha.Day, hora.Hour, hora.Minute, hora.Second)
    
            Dim Valvula156 As Image = PBval156.Image
    
            Try
    
                Using conexionSQL As New SqlConnection(My.Settings.valvulastring)
    
                    Dim comando As SqlCommand = conexionSQL.CreateCommand()
    
                    comando.CommandText = "FechaValvula"
                    comando.CommandType = CommandType.StoredProcedure
                    comando.Parameters.AddWithValue("@FechaInicio", fechaHoraIni)
                    comando.Parameters.AddWithValue("@Nombre156" = "156", Valvula156)
    
                    If Valvula156 = "On", "Sin Falla" Then
                        PBval156.Image = My.Resources.Valvularoja1
                    ElseIf Valvula156 = "On", "Sin Falla" then
                        PBval156.Image = My.Resources.ValvulaVerde
                    End If
    
    
    
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error : " & ex.Message)
    
            End Try
        End Sub

    Tengo problemas en el if, para poder decirle los estados a las valvulas, y asi mostrar la imagen que corresponde. Gracias por su tiempo 

    martes, 31 de mayo de 2016 13:44

Respuestas

  • Hola:
    No entiendo que es lo que quieres hacer con ese codigo.
    Te pongo un ejemplo a ver si te sirve de algo
    En un Form con 1 DatagridView, copia y pega el siguiente codigo
    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Try
                ' crear la sentencia sql para obtener las filas
                Dim lsQuery As String = "SELECT EmployeeID, FirstName, LastName, Gender FROM Employees WHERE Title IS NOT NULL"
                Dim lsCadConexion As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                Using loConexion As New SqlConnection(lsCadConexion)
                    Dim daAdaptador As New SqlDataAdapter(lsQuery, loConexion)
                    Dim loDataTable As New DataTable()
                    daAdaptador.Fill(loDataTable)
                    Me.DataGridView1.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            ' crear una nueva columna de tipo imagen para mostrar un icono indicativo del género del cliente y agregarla a la colección de columnas del control
            Dim colGenero As New DataGridViewImageColumn()
            colGenero.Name = "colGenero"
            Me.DataGridView1.Columns.Add(colGenero)
        End Sub

        Private Sub dataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            ' cuando se vaya a pintar la celda de la columna de imagen
            If Me.dataGridView1.Columns(e.ColumnIndex).Name = "colGenero" Then
                ' establecer la altura de la fila para que se pueda visualizar correctamente
                Me.dataGridView1.Rows(e.RowIndex).Height = 40
                ' asignar la imagen adecuada
                Select Case DirectCast(Me.dataGridView1.Rows(e.RowIndex).Cells("Gender").Value, String)
                    Case "M"
                        e.Value = New Bitmap(Application.StartupPath & "\SimboloMasculino.jpg", False)
                        Exit Select
                    Case "F"
                        e.Value = New Bitmap(Application.StartupPath & "\SimboloFemenino.jpg", True)
                        Exit Select
                End Select
            End If
        End Sub
    End Class

    P.D.
    Tienes que tener 2 ficheros con extension JPG

    Un saludo desde Bilbo
    Carlos

    miércoles, 1 de junio de 2016 21:58

Todas las respuestas

  • Hola Adriian:

    Si tal como indicas tienes tus imágenes en un archivo de recursos, a cada imagen le habrás puesto un nombre, pues para cargar la imagen en donde quieras, imaginemos que se la quieres poner a un menú te tu toolstrip, sería:

    mnuInicio.Image = CType(rm.GetObject("BitmapInicio"), Bitmap)

    donde "BitmapInicio" es el nombre de tu imagen. Después ya la asignas al mnuInicio.Image en este caso.

    Un saludo.

    Gemma

    martes, 31 de mayo de 2016 14:35
  • mi pregunta es como pasarle los estados a ese picturebox, los estado estan en la base de datos: (On, Con Falla), (On, SinFalla), (Of, ConFalla), (Of, SinFalla)

    tengo 3 tablas.

    EstadoFalla:  Id(0, 1),  Estado(Con Falla, Sin Falla)

    EstadoValvula: Id(0, 1), Estado(On, Off)

    Valvula: Id(identity), Fecha(Datetime), NOmbre("156"), IdEstadoFalla, IdEstadoValvula

    Cuando hago la consulta deberia quedar por ejemplo así 

    1 - 10-05-2016 10:00:00, 156, ConFalla, On

    y si es asi

    lo que quiero es hacer un if

    If valvula156 = "On", "ConFalla" then 

    PBval156.Image = My.resources.Valvulaverdeamarilla

    elseif valvula156 = "On", "SinFalla" then 

    PBval156.Image = My.resources.Valvulaverde

     elseif.....  

    pero no se como hacer el If para pasarle los estados, no había trabajado hasta el momento con picturebox y estoy realmente complicado.

    martes, 31 de mayo de 2016 15:19
  • martes, 31 de mayo de 2016 17:53
  • Tengo una base de datos con dos tablas:

    EstadoValvula


    Valvula


    y un Procedimiento almacenado que hace un filtro por hora

    alter procedure FechaImagen
    @FechaInicio datetime
    
    as 
    begin 
    	set nocount on;
    select
    	pv.Id,
    	pv.Fecha,
    	pv.NombreValvula,
    	ev.Detalle
    	
    from 
    	[ReporteValvula] pv 
    	Inner join [EstadoValvula] ev on (pv.IdEstadoValvula = ev.Id)
    	where 
    	pv.Fecha = @fechaInicio
    	
    Order By Fecha Desc;
    end

    si lo ejecuto me muestra lo que quiero:


    Lo que necesito ahora es poder hacer que dos controles picturebox, que tengo en el formulario cambien y me muestren una imagen u otra, cuando seleccione una hora y fecha de dos controles DateTimePicker, dependiendo de el estado que estas tengan en la fecha y hora consultada, Los estados como pueden ver son encendido o apagado, Si esta encendida mostrara la imagen1, si esta apagada mostrara la imagen2.

    Como podría hacer esto en código? Yo la verdad solo tengo el filtro por fecha y hora pero he preguntado anteriormente y nadie me ha podido ayudar con esto específicamente. Les dejo el código de como hago el filtro de fecha y hora y como creo que podría hacer el filtro espero me puedan ayudar. 

    Private Sub BtnBuscar_Click(sender As System.Object, e As System.EventArgs) Handles BtnBuscar.Click
    
            Dim fecha As DateTime = DtpFechaIni.Value.Date
            Dim hora As DateTime = CDate(DtpHoraIni.Value.ToString)
            Dim fechaHoraIni As New DateTime(
                fecha.Year, fecha.Month, fecha.Day, hora.Hour, hora.Minute, hora.Second)
    
            Try
    
                Using conexionSQL As New SqlConnection(My.Settings.valvulastring)
    
                    Dim comando As SqlCommand = conexionSQL.CreateCommand()
    
                    comando.CommandText = "FechaValvula"
                    comando.CommandType = CommandType.StoredProcedure
                    comando.Parameters.AddWithValue("@FechaInicio", fechaHoraIni)
    
                    PictureBox1.Tag = "Valvula 313"
    
                    If PictureBox1.Image = PictureBox("Encendido") Then
                        PictureBox1.Image = My.Resources.ValvulaVerde
                        PictureBox1.Image.Dispose()
                    ElseIf PictureBox1 = "Apagado" Then
                        PictureBox1.Image = My.Resources.Valvularoja1
                        PictureBox1.Image.Dispose()
                    End If
    
                    PictureBox2.Tag = "Valvula 158"
    
                    If PictureBox2 = "Encendido" Then
                        PictureBox2.Image = My.Resources.ValvulaVerde
                        PictureBox2.Image.Dispose()
                    ElseIf PictureBox2 = "Apagado" Then
                        PictureBox2.Image = My.Resources.Valvularoja1
                        PictureBox2.Image.Dispose()
                    End If
    
    
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error : " & ex.Message)
    
            End Try
        End Sub




    miércoles, 1 de junio de 2016 2:07
  • Nadie me puede ayudar ?
    miércoles, 1 de junio de 2016 14:18
  • Hola:
    No entiendo que es lo que quieres hacer con ese codigo.
    Te pongo un ejemplo a ver si te sirve de algo
    En un Form con 1 DatagridView, copia y pega el siguiente codigo
    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Try
                ' crear la sentencia sql para obtener las filas
                Dim lsQuery As String = "SELECT EmployeeID, FirstName, LastName, Gender FROM Employees WHERE Title IS NOT NULL"
                Dim lsCadConexion As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
                Using loConexion As New SqlConnection(lsCadConexion)
                    Dim daAdaptador As New SqlDataAdapter(lsQuery, loConexion)
                    Dim loDataTable As New DataTable()
                    daAdaptador.Fill(loDataTable)
                    Me.DataGridView1.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            ' crear una nueva columna de tipo imagen para mostrar un icono indicativo del género del cliente y agregarla a la colección de columnas del control
            Dim colGenero As New DataGridViewImageColumn()
            colGenero.Name = "colGenero"
            Me.DataGridView1.Columns.Add(colGenero)
        End Sub

        Private Sub dataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
            ' cuando se vaya a pintar la celda de la columna de imagen
            If Me.dataGridView1.Columns(e.ColumnIndex).Name = "colGenero" Then
                ' establecer la altura de la fila para que se pueda visualizar correctamente
                Me.dataGridView1.Rows(e.RowIndex).Height = 40
                ' asignar la imagen adecuada
                Select Case DirectCast(Me.dataGridView1.Rows(e.RowIndex).Cells("Gender").Value, String)
                    Case "M"
                        e.Value = New Bitmap(Application.StartupPath & "\SimboloMasculino.jpg", False)
                        Exit Select
                    Case "F"
                        e.Value = New Bitmap(Application.StartupPath & "\SimboloFemenino.jpg", True)
                        Exit Select
                End Select
            End If
        End Sub
    End Class

    P.D.
    Tienes que tener 2 ficheros con extension JPG

    Un saludo desde Bilbo
    Carlos

    miércoles, 1 de junio de 2016 21:58
  • No es exactamente lo que busco, pero si entendí varias cosas te agradezco J.Carlos 
    jueves, 2 de junio de 2016 15:43