Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No borrar Text de un ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=77042)

Fede14lp 15-12-2011 20:49:46

No borrar Text de un ComboBox
 
Hola a todos!
Les queria preguntar como puedo hacer para que el usuario no pueda borrar el text del combobox. Ya probe poniendo el style en csDropDownList, pero esto lo que hace es eliminar el text.
Lo que yo quiero hacer es que el ComboBox tenga text, pero que no se pueda borrar ni modificar. O sea, que quede asi como en un "ReadOnly" por decir de alguna manera.

Gracias de antemano, saludos!

ecfisa 15-12-2011 21:13:10

Hola.

De momento se me ocurren dos formas, la más obvia: Enabled en False. (Si querés evitar el efecto visual ponelo dentro de un TPanel y poné en False su propiedad Enabled).

La otra es usando el evento OnKeyPress del TComboBox:
Código Delphi [-]
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  Key:= #0;
end;

Saludos.

roman 15-12-2011 21:20:49

Cita:

Empezado por Fede14lp (Mensaje 421270)
Ya probe poniendo el style en csDropDownList, pero esto lo que hace es eliminar el text.

Yo no entiendo qué quieres decir con esto. ¿Para qué sirve un comobox con cuadro de texto si no se puede escribir en él? Y si no tiene cuadro de texto (dropdown list) ¿a qué te refieres con que desaparece el texto? Siempre se verá el texto del elemento seleccionado, a menos, claro está, que no se haya seleccionado nada.

// Saludos

Fede14lp 15-12-2011 21:21:33

Hola eficsa.
La primer solucion que me diste no me anduvo porque cuando lo puse en false me quedo inhabilidado directamente y no lo puedo desplegar al ComboBox, y despues me tiraba un error.
La segunda solucion me funciono y no se puede modificar el text, pero ademas de eso quisiera saber como puedo hacer para que aparte de no modificar el text, que tampoco se pueda poner el cursor en el text, como si le estuviera poniendo un ReadOnly, no se si me explico xD.

Gracias por la respuesta!

Fede14lp 15-12-2011 21:26:15

Cita:

Empezado por roman (Mensaje 421288)
Yo no entiendo qué quieres decir con esto. ¿Para qué sirve un comobox con cuadro de texto si no se puede escribir en él? Y si no tiene cuadro de texto (dropdown list) ¿a qué te refieres con que desaparece el texto? Siempre se verá el texto del elemento seleccionado, a menos, claro está, que no se haya seleccionado nada.

// Saludos

Hola roman!, te explico que es lo que estoy haciendo.
Estoy haciendo una especie de agenda, en la que guardo datos de la persona junto a la ciudad donde vive. Para esto, yo hice una segunda tabla con ciudades, donde guardo la ciudad, provincia y codigo postal, y cuando voy a hacer el insert de esta tabla, puse un edit para la ciudad y otro para el codigo postal. Pero para las provincias, puse un combobox con todas las provincias de Argentina, asi quedan fijas y no hay ningun error de tipeo por parte del usuario.
Entonces lo que me queda en el combobox es:
Un titulo antes de desplegar el ComboBox que dice "Elija una provincia", y luego la lista de todas las provincias Argentinas.
Por eso es, que lo que yo necesito es que no se pueda borrar ese texto que dice "Elija una provincia".

Agrego: Cuando pongo el style en csDropDownList, lo que no se ve es el Text, pero los Items del ComboBox se ven perfectamente.

roman 15-12-2011 21:37:57

Pues entonces añade una "provincia" con nombre "Elija una provincia" al principio de tu lista de ítems. Así, eso es lo que verá el usuario al comenzar y si queres validar que se haya realmente capturado la provincia sólo tienes que asegurarte que el ItemIndex del ComboBox no sea cero.

Por otro lado, para el problema que describes, si estás usando una base de datos, el enfoque que das no me parece el más adecuado. Lo más práctico sería tener una tabla en la base con el catálogo de provincias y usar un TDBLookupComboBox para que el usuario seleccione una. De todas formas, en dicho catálogo pondrías como primer elemento, la falsa provincia "Elija una provincia". Con másdetalle, lo que yo haría (y hago) es una tabla con dos campos, el primero, numérico y la llave primaria con un consecutivo y el segundo el nombre de la provincia. La false provincia tendría el valor cero en su llave primaria.

// Saludos

ecfisa 15-12-2011 21:39:52

Hola.

Si no te entiendo mál, podrías situar "Elija una provincia" en la primera posición del ComboBox, algo como:
Código Delphi [-]
  ...
  ComboBox1.Clear;
  ComboBox1.Items.Add('Elija una provincia');
  while not DataSet.Eof do
  begin
    ComboBox1.Items.Add(DataSet.FieldByName('PROVINCIA').AsString);
    DataSet.Next;
  end;
  ComboBox1.ItemIndex:= 0; 
  ...
y luego despreciar ese índice si es seleccionado:
Código Delphi [-]
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  if ComboBox1.ItemIndex > 0 then
  begin
  ...
end;

Saludos.

Edito: Y ahora que veo, tál como dijo roman... (ando algo lento con el teclado :D:D:D)

Fede14lp 18-12-2011 21:55:06

Ya solucione el problema con la segunda solucion que me dio ecfisa, gracias a todos :)


La franja horaria es GMT +2. Ahora son las 08:44:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi