2011-12-26 8 views
7

Tengo un cuadro de texto que envía algunos comandos a un instrumento. Agregué la función Autocompletar a este cuadro de texto y las cosas ahora son más fáciles.Anular o sobrecargar Autocompletar Agregar regla

Lo que estoy pensando para mejorar esto, es agregar la posibilidad de que cuando el usuario ingresa un comando (solo un texto) mientras Autocompletar encuentra una coincidencia, también muestra una descripción para ese comando.

Por el momento, tengo todas las cadenas Autocompletar en un archivo de texto y lo cargo cuando se inicia la aplicación. El archivo de texto contiene líneas como esta:

*IDN? #Query the instrument for identification 
*RST #Resets the instrument 

Así que lo que está sucediendo en mi solicitud es que debido a Autocompletar está en SuggestAppend modo, la descripción del comando también se mete en la caja de texto (esto será el mismo si sólo lo puse en Suggest modo)

lo que necesito saber es cómo forzar el Autocompletar para añadir el texto, mientras que su

  1. no añade ningún texto a partir de carbón, mientras que # añadiendo el texto sugerido
  2. Trim() el texto para evitar que los espacios que se ve en la fuente de archivo de texto

ACTUALIZA 1 Ok, creo que la única manera es hacer una nueva clase y heredar de AutoCompleteStringCollection Y en este nuevo clase, de alguna manera anula el método responsable para devolver (sumar) el texto sugerido. Realmente no tengo idea de lo que debería hacer:

class MyAutoCompleteCollection : AutoCompleteStringCollection 
{ 
    //How to override Get function of AutoCompleteStringCollection class? 
    //It is not avilable to override :(
} 

ACTUALIZACIÓN 2 descubrí que los métodos en AutoCompleteStringCollection no son reemplazable. Estoy buscando una manera de cambiar la forma en que funciona el método [] (para ser sincero, no sé cómo llamarlo). ¿Alguien tiene alguna idea sobre esto?

enter image description here

ACTUALIZACIÓN 3 Cuando el texto sin #DESC entra en el cuadro de texto, tengo un controlador de eventos para KeyDown que transferirá el comando al instrumento.

+0

¿Puede publicar su código existente para manejar la autocompletación? Es más fácil sugerir una solución de código mirando el código. –

+0

Tal vez debería usar '.Remove (base.Text.LastIndexOf ('#'), base.Text.Length - 1) .Trim();' en el momento que carga el archivo. –

+0

¡No! ¡la idea es mostrar el texto después de # dentro del cuadro de autocompletar! Solo quiero que no entre en mi cuadro de texto. –

Respuesta

1

lugar de tratar de combatir la funcionalidad de autocompletar que Microsoft ha puesto en marcha, le sugiero que utilice un cuadro combinado de varias columnas en su lugar.

Todos los que hemos utilizado admiten la finalización automática, por lo que puede almacenar su comando en la primera columna y que sea su valor y luego almacenar su descripción en la segunda columna.

Hay un gran número de controles disponibles para la compra (Infragistics, Intersoft, Syncfusion, etc.) y probablemente pueda encontrar versiones gratuitas o auto creadas en varios sitios como CodeProject.

Hacer esta ruta debería ahorrarle mucho tiempo.

1

Manteniéndose utilizando el método SuggestAppend y cargando su archivo de texto como fuente personalizada para la función Autocompletar del TextBox.

Usted puede utilizar el evento Leave del cuadro de texto para eliminar todo el texto después de # y recortar el resultado:

private void textBox1_Leave(object sender, EventArgs e) 
{ 
    textBox1.Text = textBox1.Text.Remove(textBox1.Text.LastIndexOf("#")).Trim(); 
} 

De esta manera la descripción se queda en la lista completa de automóviles, pero tan pronto como salta fuera o deje el cuadro de texto, solo el comando permanece.

+0

Hola, gracias por responder. Lamento que olvidé mencionar que también tengo un evento KeyDown para el cuadro de texto que en la tecla Enter pasará el comando al instrumento. Eso también debería tenerse en cuenta (creo que será lo mismo que tu método ...) Voy a intentarlo pronto. –

-1

La propiedad Autocompletar de Textbox está configurada SuggestAppend, lo que significa que agrega tanto el texto como la descripción. Por lo tanto, solo debe establecer la propiedad Autocompletar de Textbox en el valor "Sugerir".

Según MSDN la propiedad de autocompletar puede tomar cuatro valores de enumeración es decir,

Los siguientes son los valores de AutoCompleteMode:

Append : Appends the remainder of the most likely candidate string to the existing characters, highlighting the appended characters. 

Suggest : Displays the auxiliary drop-down list associated with the edit control. This drop-down is populated with one or more suggested completion strings. 

SuggestAppend : Appends both Suggest and Append options. 

None : Disables automatic completion. This is the default. 

Pruebe estos valores en lugar de la subclasificación de la AutoCompleteStringCollection.

+0

Hmmm ... incluso en el modo Sugerir, si el usuario presiona intro, la cadena sugerida seleccionada entrará en el cuadro de texto, no hay diferencia en comparación con SuggestAppend. –

+0

Creo que hay errores de código. Probablemente necesites verificar desde el principio. He pegado el enlace que tiene un ejemplo completo, puede usarlo como referencia y verificarlo en forma cruzada. http://technet.microsoft.com/en-us/query/chff42zw –

0

Aquí está el enlace que tiene el ejemplo completo para autocompletar

http://technet.microsoft.com/en-us/query/chff42zw 
0

Como respuesta a su actualización nr. 2: El [] es en realidad una propiedad del índice.

Su clase implementa una colección. Puede obtener elemento en la posición X utilizando el código collowing:

var thirdItem = myAutoCompleteCollectionInstance[3]; 

propiedades de índice se pueden crear de forma manual utilizando el código de abajo, que se puede utilizar para personalizar el orden mediante la devolución de los artículos que desea en los índices especificados .

public string this[int index] {get ...} {set...} 
Cuestiones relacionadas