Dim i As Integer
If DataTable1DataGridView.Rows.Count > 0 Then
For i = 0 To DataTable1DataGridView.Rows.Count - 2
Dim nuevafila As DataRow = SuperDataSet.Tables("DetallesPedido").NewRow
nuevafila.Item("IdPedido") = DataTable1DataGridView.Rows(i).Cells(0).Value
nuevafila.Item("IdProducto") = DataTable1DataGridView.Rows(i).Cells(1).Value
nuevafila.Item("Cantidad") = DataTable1DataGridView.Rows(i).Cells(3).Value
SuperDataSet.Tables("DetallesPedido").Rows.Add(nuevafila)
Next
End If
martes, 6 de marzo de 2012
Calcular datos dentro de celdas
Private Sub DataTable1DataGridView_CellEndEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataTable1DataGridView.CellEndEdit
If e.ColumnIndex = 3 Then
DataTable1DataGridView.CurrentRow.Cells(4).Value = DataTable1DataGridView.CurrentRow.Cells(2).Value * DataTable1DataGridView.CurrentRow.Cells(3).Value
End If
End Sub
If e.ColumnIndex = 3 Then
DataTable1DataGridView.CurrentRow.Cells(4).Value = DataTable1DataGridView.CurrentRow.Cells(2).Value * DataTable1DataGridView.CurrentRow.Cells(3).Value
End If
End Sub
Encontrar e insertar un dato en un datagridview después de dejar una celda
Private Sub DataTable1DataGridView_CellLeave(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataTable1DataGridView.CellLeave
If e.ColumnIndex = 1 Then
Dim fila As Integer = ProductosBindingSource.Find("NombreProducto", DataTable1DataGridView.CurrentCell.EditedFormattedValue)
ProductosBindingSource.Position = fila
DataTable1DataGridView.CurrentRow.Cells(2).Value = SuperDataSet.Tables("Productos").Rows(fila).Item("Precio")
End If
End Sub
Primero se le asigna a fila la posición de esa fila en la tabla de donde queremos coger el dato
Luego asignamos a la celda (en este caso la 2 es precio) el valor de la tabla productos de la fila (fila que es el indice que hemos cogido antes) y de la fila la propiedad llamada precio, con lo cual cogerá el precio del nombre de producto que hemos seleccionado en la tabla origen
If e.ColumnIndex = 1 Then
Dim fila As Integer = ProductosBindingSource.Find("NombreProducto", DataTable1DataGridView.CurrentCell.EditedFormattedValue)
ProductosBindingSource.Position = fila
DataTable1DataGridView.CurrentRow.Cells(2).Value = SuperDataSet.Tables("Productos").Rows(fila).Item("Precio")
End If
End Sub
Primero se le asigna a fila la posición de esa fila en la tabla de donde queremos coger el dato
Luego asignamos a la celda (en este caso la 2 es precio) el valor de la tabla productos de la fila (fila que es el indice que hemos cogido antes) y de la fila la propiedad llamada precio, con lo cual cogerá el precio del nombre de producto que hemos seleccionado en la tabla origen
Filtro entre fechas y ordenado por un campo
DataView1.Table = SuperDataSet.Tables("Pedidos")
DataView1.RowFilter = "FechaPedido >='" & CDate(TextBox1.Text) & "' and Fechapedido <='" & CDate(TextBox2.Text) & "'"
DataView1.Sort = "IdEmpleado"
PedidosDataGridView.DataSource = DataView1
hay que convertir los .text en fecha
DataView1.RowFilter = "FechaPedido >='" & CDate(TextBox1.Text) & "' and Fechapedido <='" & CDate(TextBox2.Text) & "'"
DataView1.Sort = "IdEmpleado"
PedidosDataGridView.DataSource = DataView1
hay que convertir los .text en fecha
Filtrar datos con el dataview
DataView1.Table = SuperDataSet.Tables("Compras")
DataView1.RowFilter = "Recibido=False"
ComprasDataGridView.DataSource = DataView1
Acuerdate de agregar el componente dataview al cuadro de herramientas de datos
DataView1.RowFilter = "Recibido=False"
ComprasDataGridView.DataSource = DataView1
Acuerdate de agregar el componente dataview al cuadro de herramientas de datos
Mostrar otro campo en un combobox con una tabla relacionada
En las propiedades en databindings
SelectedValue será el campo original de la tabla presente
Text será el campo que queramos relacionar (si tenemos un id, y preferimos que se vea el campo nombre)
DataSource la otra tabla, la original del dato que queremos mostrar (la que no está presente en el formulario)
Displaymember, elegimos el campo que queremos mostrar (aquí es mas fácil porqué nos mostrara solo los campos de la tabla datasource escogida)
Valuemember, el campo clave, el que tiene que ir relacionado con el selectedvalue de la otra tabla (también es "fácil" porque nos mostrará solo los campos de la tabla datasource)
SelectedValue será el campo original de la tabla presente
Text será el campo que queramos relacionar (si tenemos un id, y preferimos que se vea el campo nombre)
DataSource la otra tabla, la original del dato que queremos mostrar (la que no está presente en el formulario)
Displaymember, elegimos el campo que queremos mostrar (aquí es mas fácil porqué nos mostrara solo los campos de la tabla datasource escogida)
Valuemember, el campo clave, el que tiene que ir relacionado con el selectedvalue de la otra tabla (también es "fácil" porque nos mostrará solo los campos de la tabla datasource)
Hacer una búsqueda de un registro
Dim posicion As Integer
posicion = ClientesBindingSource.Find(ToolStripComboBox1.SelectedItem.ToString, ToolStripTextBox1.Text)
If posicion <> -1 Then
ClientesBindingSource.Position = posicion
Else
MessageBox.Show("Ese cliente no existe")
End If
posicion = ClientesBindingSource.Find(ToolStripComboBox1.SelectedItem.ToString, ToolStripTextBox1.Text)
If posicion <> -1 Then
ClientesBindingSource.Position = posicion
Else
MessageBox.Show("Ese cliente no existe")
End If
Cargando los nombres de los campos de una tabla en un combobox
For i = 0 To SuperDataSet.Clientes.Count - 1
ToolStripComboBox1.Items.Add(SuperDataSet.Clientes.Columns.Item(i))
Next
ToolStripComboBox1.Items.Add(SuperDataSet.Clientes.Columns.Item(i))
Next
domingo, 4 de marzo de 2012
Gestión de errores --- Try Catch
Try
EmpleadoBindingSource.EndEdit()
OleDbDataAdapter1.Update(DataSet11, "Empleado")
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message.ToString)
Catch ex As ConstraintException
MessageBox.Show(ex.Message.ToString)
Catch ex As NoNullAllowedException
MessageBox.Show(ex.Message.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
EmpleadoBindingSource.EndEdit()
OleDbDataAdapter1.Update(DataSet11, "Empleado")
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message.ToString)
Catch ex As ConstraintException
MessageBox.Show(ex.Message.ToString)
Catch ex As NoNullAllowedException
MessageBox.Show(ex.Message.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
sábado, 3 de marzo de 2012
Otra forma de moverse entre datos y datagridviews
Si no podemos navegar entre los datagridviews con el control bindingsource (bindingsource1.movenext())
tenemos este otro sistema
Private Sub bprimero_Click(sender As System.Object, e As System.EventArgs) Handles bprimero.Click
DataGridView1.CurrentCell = DataGridView1(0, 0)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub banterior_Click(sender As System.Object, e As System.EventArgs) Handles banterior.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bsiguiente_Click(sender As System.Object, e As System.EventArgs) Handles bsiguiente.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex + 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bultimo_Click(sender As System.Object, e As System.EventArgs) Handles bultimo.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.Rows.Count - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
tenemos este otro sistema
Private Sub bprimero_Click(sender As System.Object, e As System.EventArgs) Handles bprimero.Click
DataGridView1.CurrentCell = DataGridView1(0, 0)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub banterior_Click(sender As System.Object, e As System.EventArgs) Handles banterior.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bsiguiente_Click(sender As System.Object, e As System.EventArgs) Handles bsiguiente.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex + 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bultimo_Click(sender As System.Object, e As System.EventArgs) Handles bultimo.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.Rows.Count - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
viernes, 2 de marzo de 2012
Crear relación maestro detalle
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
OleDbDataAdapter1.Fill(DataSet11, "Tipo De Producto")
OleDbDataAdapter2.Fill(DataSet11, "Producto")
DataSet11.Relations.Add("Relacionproductos", DataSet11.Tables("Tipo de producto").Columns("Product type ID"), DataSet11.Tables("Producto").Columns("ID del tipo de producto"))
Me.DataGridView1.DataSource = DataSet11
Me.DataGridView1.DataMember = "Tipo de producto"
Me.DataGridView2.DataSource = DataSet11
Me.DataGridView2.DataMember = "Tipo de producto.Relacionproductos"
End Sub
después de cargar los dataadapters, creo una relación, cogiendo tipo de producto como tabla maestra y producto como la tabla detalle, relacionándolas por el registro en común, después al primer datagridview le pongo de datasource el dataset11 y de datamember la tabla tipo de producto, y para el datagridview2 el datamember cambia a ser el de tipo de producto.relacionproductos siendo relacionproductos la relación que acabamos de crear
OleDbDataAdapter1.Fill(DataSet11, "Tipo De Producto")
OleDbDataAdapter2.Fill(DataSet11, "Producto")
DataSet11.Relations.Add("Relacionproductos", DataSet11.Tables("Tipo de producto").Columns("Product type ID"), DataSet11.Tables("Producto").Columns("ID del tipo de producto"))
Me.DataGridView1.DataSource = DataSet11
Me.DataGridView1.DataMember = "Tipo de producto"
Me.DataGridView2.DataSource = DataSet11
Me.DataGridView2.DataMember = "Tipo de producto.Relacionproductos"
End Sub
después de cargar los dataadapters, creo una relación, cogiendo tipo de producto como tabla maestra y producto como la tabla detalle, relacionándolas por el registro en común, después al primer datagridview le pongo de datasource el dataset11 y de datamember la tabla tipo de producto, y para el datagridview2 el datamember cambia a ser el de tipo de producto.relacionproductos siendo relacionproductos la relación que acabamos de crear
martes, 28 de febrero de 2012
Acciones con el BindingSource
Acciones que podemos hacer con un bindingsource
Ir al siguiente registro -----> EmpleadoBindingSource.MoveNext()
Ir al anterior registro -----> EmpleadoBindingSource.MovePrevious()
Ir al primero registro -------> EmpleadoBindingSource.MoveFirst()
Ir al último registro ---------> EmpleadoBindingSource.MoveLast()
Añade un nuevo registro --------> EmpleadoBindingSource.AddNew()
Borra el registro seleccionado actual -------> EmpleadoBindingSource.RemoveCurrent()
Guarda los cambios ---->
EmpleadoBindingSource.EndEdit() (Termina la edición y guarda los cambios)
OleDbDataAdapter1.Update(DataSet11) (Guarda esos cambios en la base de datos)
Ir al siguiente registro -----> EmpleadoBindingSource.MoveNext()
Ir al anterior registro -----> EmpleadoBindingSource.MovePrevious()
Ir al primero registro -------> EmpleadoBindingSource.MoveFirst()
Ir al último registro ---------> EmpleadoBindingSource.MoveLast()
Añade un nuevo registro --------> EmpleadoBindingSource.AddNew()
Borra el registro seleccionado actual -------> EmpleadoBindingSource.RemoveCurrent()
Guarda los cambios ---->
EmpleadoBindingSource.EndEdit() (Termina la edición y guarda los cambios)
OleDbDataAdapter1.Update(DataSet11) (Guarda esos cambios en la base de datos)
lunes, 27 de febrero de 2012
Conexión a base de datos forma 2 bd2
Arrastrar un Datagridview
Elegir origen de datos --> Agregar origen de datos de proyecto....
Se crea un Dataset un BindingSource y un TableAdapter
El evento de rellenar del load se ha generado solo
Elegir origen de datos --> Agregar origen de datos de proyecto....
Se crea un Dataset un BindingSource y un TableAdapter
El evento de rellenar del load se ha generado solo
Conexión a base de datos forma 1 bd1
Agregar los elementos oledb desde la pestaña datos del cuadro de herramientas
Explorador de Servidores -->Conexiones de datos --> Agregar conexión
Archivos de bases de datos de Microsoft Access (en este caso)
Arrastrar oledbdataadapter sobre el formulario, después de configurar se crea un OLedbconecction
Datos--> Generar conjunto de datos (se genera el dataset)
Arrastramos un datagridview --> Tareas de DatagridView y lo enlazamos a la tabla (se crea el componente bindingsource)
rellenar los datos en el dataadapter con el dataset en el evento load
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
OleDbDataAdapter1.Fill(DataSet11, "Clientes")
End Sub
Explorador de Servidores -->Conexiones de datos --> Agregar conexión
Archivos de bases de datos de Microsoft Access (en este caso)
Arrastrar oledbdataadapter sobre el formulario, después de configurar se crea un OLedbconecction
Datos--> Generar conjunto de datos (se genera el dataset)
Arrastramos un datagridview --> Tareas de DatagridView y lo enlazamos a la tabla (se crea el componente bindingsource)
rellenar los datos en el dataadapter con el dataset en el evento load
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
OleDbDataAdapter1.Fill(DataSet11, "Clientes")
End Sub
domingo, 26 de febrero de 2012
LastIndexOf y substring
Lastindexof sirve para indicar la posición del ultimo carácter que hallamos indicado de una cadena
Substring es para obtener una subcadena dentro de un texto
Dim texto As String
Dim precio As Double
Dim num As Integer
Dim articulo As String
texto = e.Data.GetData(DataFormats.Text).ToString
num = texto.LastIndexOf(" ")
precio = texto.Substring(num)
articulo = texto.Substring(0, num)
precio = precio + (precio * 0.1)
texto = articulo & " " & precio
Listventas.Items.Add(texto)
Texttotal.Text = Texttotal.Text + precio
Con esto estamos cogiendo un precio que está separado por un texto entre un espacio, que podría ser ("Galletas 4") así num coge la posición del espacio, precio empieza a coger los caracteres desde ese espacio (el 4) y articulo coge desde la posición 0 hasta la posicion num ("Galletas") luego aumento el precio un 10% y vuelvo a pegar el texto
Dim texto As String
Dim precio As Double
Dim num As Integer
Dim articulo As String
Dim precioaumentado As Double
texto = e.Data.GetData(DataFormats.Text).ToString
num = texto.LastIndexOf(" ")
precio = texto.Substring(num)
articulo = texto.Substring(0, num)
precioaumentado = (precio * 100) / 110
texto = articulo & " " & precioaumentado
Listalmacen.Items.Add(texto)
Texttotal.Text = Texttotal.Text - precio
este código lo que haces es devolver el precio a su estado original (quitándole el 10% del principio)
Substring es para obtener una subcadena dentro de un texto
Dim texto As String
Dim precio As Double
Dim num As Integer
Dim articulo As String
texto = e.Data.GetData(DataFormats.Text).ToString
num = texto.LastIndexOf(" ")
precio = texto.Substring(num)
articulo = texto.Substring(0, num)
precio = precio + (precio * 0.1)
texto = articulo & " " & precio
Listventas.Items.Add(texto)
Texttotal.Text = Texttotal.Text + precio
Con esto estamos cogiendo un precio que está separado por un texto entre un espacio, que podría ser ("Galletas 4") así num coge la posición del espacio, precio empieza a coger los caracteres desde ese espacio (el 4) y articulo coge desde la posición 0 hasta la posicion num ("Galletas") luego aumento el precio un 10% y vuelvo a pegar el texto
Dim texto As String
Dim precio As Double
Dim num As Integer
Dim articulo As String
Dim precioaumentado As Double
texto = e.Data.GetData(DataFormats.Text).ToString
num = texto.LastIndexOf(" ")
precio = texto.Substring(num)
articulo = texto.Substring(0, num)
precioaumentado = (precio * 100) / 110
texto = articulo & " " & precioaumentado
Listalmacen.Items.Add(texto)
Texttotal.Text = Texttotal.Text - precio
este código lo que haces es devolver el precio a su estado original (quitándole el 10% del principio)
Arrastrar y soltar (DoDragDrop, DragEnter,DragDrop)
Primero de todo hay que elegir el objeto que se desea arrastrar y darle una condición del efecto (copiar,cortar...) en este caso copiar
Private Sub Listalmacen_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Listalmacen.MouseDown
Listalmacen.DoDragDrop(Listalmacen.SelectedItem.ToString, DragDropEffects.Copy)
End Sub
Al objeto de destino hay que ponerle la propiedad de AllowDrop a true
Después al objeto de destino hay que darle la opción de mirar que datos se están aceptando
Private Sub Listventas_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Listventas.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
Y lo siguiente es aceptar los datos
Private Sub Listventas_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Listventas.DragDrop
Listventas.Items.Add(e.Data.GetData(DataFormats.Text).ToString)
End Sub
Private Sub Listalmacen_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Listalmacen.MouseDown
Listalmacen.DoDragDrop(Listalmacen.SelectedItem.ToString, DragDropEffects.Copy)
End Sub
Al objeto de destino hay que ponerle la propiedad de AllowDrop a true
Después al objeto de destino hay que darle la opción de mirar que datos se están aceptando
Private Sub Listventas_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Listventas.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
Y lo siguiente es aceptar los datos
Private Sub Listventas_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Listventas.DragDrop
Listventas.Items.Add(e.Data.GetData(DataFormats.Text).ToString)
End Sub
viernes, 24 de febrero de 2012
Compartir eventos con código (AddHandler, Adressof)
Cuando añadimos por ejemplo un nuevo toolstripmenuitem, y queremos que tenga el mismo evento click ya creado procederemos a AddHandler y Adressof
Dim texto As String = ""
Dim num As Integer
Dim nuevotam As ToolStripMenuItem
texto = InputBox("Introduce un tamaño de 8 a 40", "Tamaño")
If IsNumeric(texto) Then
If texto >= 8 And texto <= 40 And IsNumeric(num) Then
Dim repe As Boolean
Dim insertado As Boolean = False
repe = repetido(texto)
If repe = False Then
Dim i As Integer = 0
Do While i <= ContextMenuStrip2.Items.Count - 3 And insertado = False
If CDbl(texto) < ContextMenuStrip2.Items.Item(i).Text Then
nuevotam = New ToolStripMenuItem
nuevotam.Text = texto
Label1.Font = New System.Drawing.Font(fuente, CInt(nuevotam.Text), estilo)
ContextMenuStrip2.Items.Insert(i, nuevotam)
AddHandler nuevotam.Click, AddressOf ToolStripMenuItem2_Click
insertado = True
Else
i = i + 1
End If
Loop
If insertado = False Then
nuevotam = New ToolStripMenuItem
nuevotam.Text = texto
Label1.Font = New System.Drawing.Font(fuente, CInt(nuevotam.Text), estilo)
ContextMenuStrip2.Items.Insert(ContextMenuStrip2.Items.Count - 2, nuevotam)
AddHandler nuevotam.Click, AddressOf ToolStripMenuItem2_Click
End If
Else
MessageBox.Show("Tamaño repetido")
End If
Else
MessageBox.Show("Error #459215E2: El valor introducido no es un valor válido")
End If
End If
Como podemos ver, estamos creando un nuevo toolstripmenuitem para insertarlo, darle el formato al label1, con las características (el tamaño) de este, y después compartimos el evento click con un evento ya existente
Dim texto As String = ""
Dim num As Integer
Dim nuevotam As ToolStripMenuItem
texto = InputBox("Introduce un tamaño de 8 a 40", "Tamaño")
If IsNumeric(texto) Then
If texto >= 8 And texto <= 40 And IsNumeric(num) Then
Dim repe As Boolean
Dim insertado As Boolean = False
repe = repetido(texto)
If repe = False Then
Dim i As Integer = 0
Do While i <= ContextMenuStrip2.Items.Count - 3 And insertado = False
If CDbl(texto) < ContextMenuStrip2.Items.Item(i).Text Then
nuevotam = New ToolStripMenuItem
nuevotam.Text = texto
Label1.Font = New System.Drawing.Font(fuente, CInt(nuevotam.Text), estilo)
ContextMenuStrip2.Items.Insert(i, nuevotam)
AddHandler nuevotam.Click, AddressOf ToolStripMenuItem2_Click
insertado = True
Else
i = i + 1
End If
Loop
If insertado = False Then
nuevotam = New ToolStripMenuItem
nuevotam.Text = texto
Label1.Font = New System.Drawing.Font(fuente, CInt(nuevotam.Text), estilo)
ContextMenuStrip2.Items.Insert(ContextMenuStrip2.Items.Count - 2, nuevotam)
AddHandler nuevotam.Click, AddressOf ToolStripMenuItem2_Click
End If
Else
MessageBox.Show("Tamaño repetido")
End If
Else
MessageBox.Show("Error #459215E2: El valor introducido no es un valor válido")
End If
End If
Como podemos ver, estamos creando un nuevo toolstripmenuitem para insertarlo, darle el formato al label1, con las características (el tamaño) de este, y después compartimos el evento click con un evento ya existente
martes, 21 de febrero de 2012
Fuente, tamaño y estilo
Para cambiar el estilo de un texto (en esta entrada la fuente)
Dim fuente As String = Label1.Font.Name
Dim tamanyo As Integer = Label1.Font.Size
Dim estilo As FontStyle = Label1.Font.Style
Label1.Font = New System.Drawing.Font(CStr(sender.text), tamanyo, estilo)
guardamos el estilo por defecto del label y luego le volvemos a darle el mismo estilo, cambiando la fuente por sender.text (que en este caso podría ser arial,verdana...)
Dim fuente As String = Label1.Font.Name
Dim tamanyo As Integer = Label1.Font.Size
Dim estilo As FontStyle = Label1.Font.Style
Label1.Font = New System.Drawing.Font(CStr(sender.text), tamanyo, estilo)
guardamos el estilo por defecto del label y luego le volvemos a darle el mismo estilo, cambiando la fuente por sender.text (que en este caso podría ser arial,verdana...)
lunes, 20 de febrero de 2012
Ismdicontainer y mdiparent
para hacer un form como el principal y los demás que se puedan abrir dentro de este, lo primero de todo es poner la propiedad del formulario IsMdiContainer a true después para abrir un formulario dentro de este habría que escribir este código dentro de un button o similar
Private Sub TextoToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TextoToolStripMenuItem.Click
formtexto.MdiParent = Me
formtexto.Show()
TextoToolStripMenuItem.Enabled = False
End Sub
en este caso es un botón de menu que no se podrá pulsar después, y conseguimos que se muestre el formulario formtexto
Private Sub TextoToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TextoToolStripMenuItem.Click
formtexto.MdiParent = Me
formtexto.Show()
TextoToolStripMenuItem.Enabled = False
End Sub
en este caso es un botón de menu que no se podrá pulsar después, y conseguimos que se muestre el formulario formtexto
domingo, 19 de febrero de 2012
Tabcontrol, controls, format y ctype
Con el siguiente código se puede ver como recoger los diferentes objetos dentro de las pestañas de un tabcontrol, para controlarlo mas solo va a coger los checkbox y radiobuttons y los mostrará en dos listas, uno con el nombre del tab y del articulo y en la otra lista el precio con formato 0.00 para el que usamos format, con ctype convertimos los controls en checkbox o radiobutton para poder acceder a sus propiedades .checked
For i = 0 To TabControl1.Controls.Count - 1
For j = 0 To TabControl1.Controls(i).Controls.Count - 1
If TypeOf TabControl1.Controls(i).Controls(j) Is RadioButton Then
If CType(TabControl1.Controls(i).Controls(j), RadioButton).Checked = True Then
Lista1.Items.Add(TabControl1.Controls(i).Text & " " & CType(TabControl1.Controls(i).Controls(j), RadioButton).Text)
Lista2.Items.Add(Format(CDbl(CType(TabControl1.Controls(i).Controls(j), RadioButton).Tag), "#,###.00"))
TextBox1.Text = TextBox1.Text + CDbl(CType(TabControl1.Controls(i).Controls(j), RadioButton).Tag)
End If
Else
If TypeOf TabControl1.Controls(i).Controls(j) Is CheckBox Then
If CType(TabControl1.Controls(i).Controls(j), CheckBox).Checked = True Then
Lista1.Items.Add(TabControl1.Controls(i).Text & " " & CType(TabControl1.Controls(i).Controls(j), CheckBox).Text)
Lista2.Items.Add(Format(CDbl(CType(TabControl1.Controls(i).Controls(j), CheckBox).Tag), "#,###.00"))
TextBox1.Text = TextBox1.Text + CDbl(CType(TabControl1.Controls(i).Controls(j), CheckBox).Tag)
End If
End If
End If
Next
Next
For i = 0 To TabControl1.Controls.Count - 1
For j = 0 To TabControl1.Controls(i).Controls.Count - 1
If TypeOf TabControl1.Controls(i).Controls(j) Is RadioButton Then
If CType(TabControl1.Controls(i).Controls(j), RadioButton).Checked = True Then
Lista1.Items.Add(TabControl1.Controls(i).Text & " " & CType(TabControl1.Controls(i).Controls(j), RadioButton).Text)
Lista2.Items.Add(Format(CDbl(CType(TabControl1.Controls(i).Controls(j), RadioButton).Tag), "#,###.00"))
TextBox1.Text = TextBox1.Text + CDbl(CType(TabControl1.Controls(i).Controls(j), RadioButton).Tag)
End If
Else
If TypeOf TabControl1.Controls(i).Controls(j) Is CheckBox Then
If CType(TabControl1.Controls(i).Controls(j), CheckBox).Checked = True Then
Lista1.Items.Add(TabControl1.Controls(i).Text & " " & CType(TabControl1.Controls(i).Controls(j), CheckBox).Text)
Lista2.Items.Add(Format(CDbl(CType(TabControl1.Controls(i).Controls(j), CheckBox).Tag), "#,###.00"))
TextBox1.Text = TextBox1.Text + CDbl(CType(TabControl1.Controls(i).Controls(j), CheckBox).Tag)
End If
End If
End If
Next
Next
jueves, 16 de febrero de 2012
Sender, TypeOf y tag
Con este ejemplo se puede ver que se puede compartir el mismo evento para diferentes objetos, el objeto se desenlaza con el evento y se pasa a llamar sender que será el objeto que desencadene la opción y con el typeof podemos comprobar dentro de que clase de objeto se trata
Private Sub Rsopa_Click(sender As System.Object, e As System.EventArgs) Handles Rsopa.Click, Rternera.Click, Rpollo.Click, Rpescado.Click, Rnatillas.Click, Rmacarrones.Click, Rhelado.Click, Rfruta.Click, Rflan.Click, Rarroz.Click, Cvino.Click, Cpan.Click, Cagua.Click, Combocafe.Click, Combocafe.SelectedIndexChanged
If TypeOf sender Is RadioButton Then
Me.Text = "Menú: " & sender.text & " " & sender.tag
Ttotal.Text = CDbl(Ttotal.Text) + CDbl(sender.tag)
End If
If TypeOf sender Is CheckBox Then
Me.Text = "Varios: " & sender.text & " " & sender.tag
Ttotal.Text = CDbl(Ttotal.Text) + CDbl(sender.tag)
End If
If sender Is Combocafe Then
If Combocafe.SelectedItem = "Sí" Then
Me.Text = "Cafe" & " " & sender.tag
Ttotal.Text = CDbl(Ttotal.Text) + CDbl(sender.tag)
End If
End If
End Sub
el tag es una propiedad de cualquier objeto para almacenar un dato, en este ejemplo se almacena el precio
Private Sub Rsopa_Click(sender As System.Object, e As System.EventArgs) Handles Rsopa.Click, Rternera.Click, Rpollo.Click, Rpescado.Click, Rnatillas.Click, Rmacarrones.Click, Rhelado.Click, Rfruta.Click, Rflan.Click, Rarroz.Click, Cvino.Click, Cpan.Click, Cagua.Click, Combocafe.Click, Combocafe.SelectedIndexChanged
If TypeOf sender Is RadioButton Then
Me.Text = "Menú: " & sender.text & " " & sender.tag
Ttotal.Text = CDbl(Ttotal.Text) + CDbl(sender.tag)
End If
If TypeOf sender Is CheckBox Then
Me.Text = "Varios: " & sender.text & " " & sender.tag
Ttotal.Text = CDbl(Ttotal.Text) + CDbl(sender.tag)
End If
If sender Is Combocafe Then
If Combocafe.SelectedItem = "Sí" Then
Me.Text = "Cafe" & " " & sender.tag
Ttotal.Text = CDbl(Ttotal.Text) + CDbl(sender.tag)
End If
End If
End Sub
el tag es una propiedad de cualquier objeto para almacenar un dato, en este ejemplo se almacena el precio
martes, 14 de febrero de 2012
Anular selección de un listbox
Dim i As Integer
For i = 0 To ListBox1.Items.Count - 1
If ListBox1.GetSelected(i) = True Then
ListBox1.SetSelected(i, False)
End If
Next
For i = 0 To ListBox1.Items.Count - 1
If ListBox1.GetSelected(i) = True Then
ListBox1.SetSelected(i, False)
End If
Next
sábado, 11 de febrero de 2012
Keydown y e.keycode
Para controlar entradas de teclado especiales como la tecla enter o escape se llama al evento keydown (se puede ver la utilidad del keypress en la entrada anterior
Un ejemplo de como controlar el enter y el escape (en este caso con el enter pasamos de un control a otro y el escape cerrara el programa
If e.KeyCode = Keys.Enter Then
If txtOperando1.Focused = True Then
txtOperando2.Focus()
Else
txtOperando1.Focus()
End If
End If
If e.KeyCode = Keys.Escape Then
Me.Close()
End If
Un ejemplo de como controlar el enter y el escape (en este caso con el enter pasamos de un control a otro y el escape cerrara el programa
If e.KeyCode = Keys.Enter Then
If txtOperando1.Focused = True Then
txtOperando2.Focus()
Else
txtOperando1.Focus()
End If
End If
If e.KeyCode = Keys.Escape Then
Me.Close()
End If
lunes, 6 de febrero de 2012
Keypress y e.handled
Si no queremos que se pueda pulsar una tecla que no sea numero o , coma (para una calculadora por ejemplo)
basta con este código
If IsNumeric(e.KeyChar) = False And e.KeyChar <> "," Then
e.Handled = True
End If
Pistas:
Recuerda que es and, si pusiera un or nunca se cumpliría la excepción
El e.handled hay que ponerlo a true, así no se podrá escribir una letra por ejemplo
basta con este código
If IsNumeric(e.KeyChar) = False And e.KeyChar <> "," Then
e.Handled = True
End If
Pistas:
Recuerda que es and, si pusiera un or nunca se cumpliría la excepción
El e.handled hay que ponerlo a true, así no se podrá escribir una letra por ejemplo
Suscribirse a:
Comentarios (Atom)