buenas noches gente del foro...verán tengo una duda...estoy haciendo una aplicación de escritorio en la cual ingreso una serie de datos para darlos de alta en una tabla en una bd....verán cuando ingreso el nro d orden en el textbox presionaba un botón consultar para ver si ya se encontraba esa orden registrada si no estaba, habilitaba los controles para cargar los datos y luego registrarlos....al exponer esta parte d la aplicación (mi tesis) la profesora m la rechazo ya q es tedioso para el usuario presionar un botón para consultar sobre un dato si esta registrado o no....x lo q se m ocurrio implementar un autocomplete en el textbox.....m podrían ayudar sobre la implementación es decir ejemplos y demás? creo entender q al ir escribiendo el dato en el textbox hace la consulta y va trayendo los datos q tngan ese valor? y si no esta podría activar los otros controles y demás x ejemplo?
espero no causar muchas molestias y dsd ya muchas grax
expongo el código q fui realizando hst el momentousing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RegistrarOCspp2
{
public partial class RegistrarOrden : Form
{
public RegistrarOrden()
{
InitializeComponent();
}
private void studioButton2_Click(object sender, EventArgs e)
{
this.Close();
}
private void RegistrarOrden_Load(object sender, EventArgs e)
{
// TODO: esta línea de código carga datos en la tabla 'proyectoSaludDataSet7.medicamentos1' Puede moverla o quitarla según sea necesario.
this.medicamentos1TableAdapter.Fill(this.proyectoSaludDataSet7.medicamentos1);
}
private static void OnlyNumber(KeyPressEventArgs e, bool isdecimal)
{
String aceptados;
if (!isdecimal)
{
aceptados = "0123456789," + Convert.ToChar(8);
}
else
aceptados = "0123456789." + Convert.ToChar(8);
if (aceptados.Contains("" + e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
private void txtUnidad_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
OnlyNumber(e, false);
}
}
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true;
OnlyNumber(e, false);
}
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar))
e.Handled = false;
else if (char.IsControl(e.KeyChar))
e.Handled = false;
else if (char.IsSeparator(e.KeyChar))
e.Handled = false;
else
e.Handled = true;
}
private void textBox1_Click(object sender, EventArgs e)
{
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.txtNumero, "Ejemplo: 2290");
txtCantidad.Enabled = true;
}
private void button1_Click(object sender, EventArgs e)
{
if (txtCantidad.Text == "" || txtPrograma.Text == "" || txtPrecio.Text == "")
{
DialogResult ds = MessageBox.Show(this, "DEBE COMPLETAR TODOS LOS CAMPOS", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.Text = ds.ToString();
}
else
if (txtCantidad.Text != "" || txtPrograma.Text != "" || txtPrecio.Text != "")
{
string medicamento = comboMedicamento.Text;
int cantidad = int.Parse(txtCantidad.Text);
string programa = txtPrograma.Text;
float precio = float.Parse(txtPrecio.Text);
dgv.Rows.Add(medicamento, cantidad, programa, precio, cantidad * precio);
button3.Enabled = true;
}
}
private void button4_Click(object sender, EventArgs e)
{
this.Close();
}
private void button3_Click(object sender, EventArgs e)
{
int fila = dgv.CurrentRow.Index;
if (fila == 0)
button3.Enabled = false;
dgv.Rows.RemoveAt(fila);
}
}
}
Hola como estas.
Si a tu profesora no le gusto que el usuario aprete el boton para buscar puedes usar el evento KeyDown para buscar el codigo y dejar el foco ahi para que siga buscando.
Aca te dejo un ejemplo cuando presione Enter dentro de textbox busque tu registro, espero me entiendas es lo unico que se me ocurre.
Private Sub txtBuscarEmpleado_KeyDown(sender As Object, e As KeyEventArgs) Handles txtBuscarEmpleado.KeyDown
If (e.KeyCode = Keys.Enter) Then
buscarCodigoEmpleado()
txtBuscarEmpleado.focus()
End If
Veo que Elektro te dio una solucion mas facil puedes cargar tu registros al combox desde la BD y luego el auto completado como el indica.
Saludos
Puedes utilizar un TextBox o también un ComboBox, el procedimiento es el mismo que explico a continuación, pero si los datos que se puedan buscar ya están pre-definidos entonces preferiblemente utiliza un ComboBox, no un TextBox.
Asignas el modo de completado deseado a la propiedad ComboBox.AutoCompleteMode, y el valor de ComboBox.AutoCompleteSource por la lista de items actual (AutoCompleteSource.ListItems) o una colección de strings personalizada (AutoCompleteSource.CustomSource)
Ejemplo en VB.Net (para no ponértelo todo tan fácil):
Dim items As String() = {"qwerty", "asdfg", "zxcvb"}
Dim autoCompleteSource As New AutoCompleteStringCollection
autoCompleteSource.AddRange(items)
With ComboBox1
.SuspendLayout()
.BeginUpdate()
.Items.AddRange(items)
.AutoCompleteCustomSource = autoCompleteSource
.AutoCompleteMode = AutoCompleteMode.SuggestAppend
.AutoCompleteSource = Windows.Forms.AutoCompleteSource.CustomSource
.EndUpdate()
.ResumeLayout()
End With
El resto sería cómo ha comentado @nolasco281, te suscribes al evento ComboBox.KeyDown (o también ComboBox.SelectedValueChanged con una diferencia de funcionalidad), y realizas la query.
Saludos!
en realidad no, el AutoComplete no consulta a ningun lado mientras escribis, digamos que es un "array precargado" de strings que ya estan cargados en el control, y cuando escribis lo unico que hace es buscar sobre ese "array interno", sino imaginate cada vez que escribis tendrias que consultar la base de datos y seria un tremendo gasto de recursos.
en internet podes encontrar un monton de ejemplos de autocomplete simple en .NET, son pocas lineas de codigo, despues adaptalo a lo tuyo.
saludos.
Creo que con lo que dice @Eleкtro ya lo tienes resuelto, igual, cualquier cosa pregunta de nuevo.
Ahora, quiero hacerte una sugerencia, esto es algo que realmente puedes tener en cuenta para el desarrollo de tus proyetos. Utiliza un solo lenguaje para definir tus cosas, o sea, si utilizas el español para identificar tus variables, métodos, etc. Mantenlo así en todo el proyecto, evita utilizar español aquí e inglés alla. También sería bueno si te acostumbraras a darle nombres descriptivos a tus controles/variables y evitar cosas como Button1, Button2, etc. Esto le dará claridad a tu código
Salu2s
como siempre....me han servido d gran ayuda vuestros comentarios muchas grax x responder SLDS!!!