Autor
|
Tema: [SOLUCIONADO] Agregar item a combo (API) (Leído 7,538 veces)
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
Buenas, estoy con esa duda. Tengo una aplicación a la que tengo que agregarle unos datos mas al combo (tengo que agregarle años, ya que se quedo corto y es una app vieja) y quisiera saber como agregarle un item. El buscar el Combo no me preocupa, me preocupa mas como agregar el item. Se hace con sendmessage no? Dejo algunas funciones que voy a usar, quisas a alguien mas le sirven. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindow( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As IntPtr End Function
<DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowByClass( _ ByVal lpClassName As String, _ ByVal zero As IntPtr) As IntPtr End Function
<DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowByCaption( _ ByVal zero As IntPtr, _ ByVal lpWindowName As String) As IntPtr End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _ ByVal childAfter As IntPtr, _ ByVal lclassName As String, _ ByVal windowTitle As String) As IntPtr End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr End Function Gracias Mariano Edit: Me tope con un problema. Al usar la funcion GetChildWindows de una ventana, no me devuelve el valor de los ComboBox, justamente los que necesito y del resto de los controles si. Usando el WinID puedo sacar el handle del control, pero esa no es la idea. Estoy atento a cualquier sugerencia.
|
|
« Última modificación: 14 Enero 2010, 18:39 pm por elmaro »
|
En línea
|
|
|
|
seba123neo
|
Hola, si se hace con SendMessage y con el mensaje CB_ADDSTRING. Private Const CB_ADDSTRING = &H143
y para agregar seria: SendMessage handleDelCombo, CB_ADDSTRING, 0, ByVal "Hola"
saludos.
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
Seba123neo podrias pasarme la declaracion correcta a usar de SendMessage si la tenes por ahi? Porque me da "La conversion especificada no es valida" Las saque de: http://www.pinvoke.net/default.aspx/user32.SendMessageSaludos! Edito:Si lo pruebo en un combo dentro de mi formulario(para verificar que al menos funcione) me salta un error de "Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada" :S
|
|
« Última modificación: 13 Enero 2010, 14:54 pm por elmaro »
|
En línea
|
|
|
|
seba123neo
|
claro, te explico, el tema es que hay 2 tipos de declaraciones de SendMessage, una para mandar Stringsy la otra Long(integers en .NET). en visual basic 6 cuando querias usar las 2 debias delarar las api's con diferentes nombres y cambiando el tipo de dato del ultimo parametro de la api. por eso veras por ahi nombres como SendMessageSTRING o SendMessageLONG. visual basic 6 en el ultimo parametro se usaba AS Any, aca en .NET cuando queres mandar un mensaje con valor String debes poner en el ultimo parametro As String, y cuando quieras mandar un valor Integer, pones As Integer, podes declarar las 2 api's al mismo tiempo, total el .NET hace automaticamente sobrecarga de funciones, y entonces cuando mandes un string automaticamente va a usar la api que tenga como ultimo parametro String, igual para la de Integer... Para Integer:<System.Runtime.InteropServices.DllImport("user32.DLL")> _ Private Shared Function SendMessage( _ ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _ ByVal wParam As Integer, ByVal lParam As Integer _ ) As Integer End Sub
Para String:<System.Runtime.InteropServices.DllImport("user32.DLL")> _ Private Shared Function SendMessage( _ ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _ ByVal wParam As Integer, ByVal lParam As String _ ) As Integer End Sub
saludos.
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
Gracias!! Acabo de probarlo con en una aplicacion mia y funciono! Mañana la pruebo en la app que necesito y comento. El problema estaba en el tipo de dato, mira vos. Habia visto una con StringBuilder y me daba un error raro. En fin, gracias!
Atte. Mariano Malomo
Edit: Y ya que estamos en el tema, de donde puedo sacar los valores de las constantes para otras acciones para este control y otros? Seria de gran utilidad
|
|
« Última modificación: 14 Enero 2010, 03:14 am por elmaro »
|
En línea
|
|
|
|
seba123neo
|
de internet jeje , aca todas los mensajes para combobox: Public Const CB_GETEDITSEL As Integer = &H140 Public Const CB_LIMITTEXT As Integer = &H141 Public Const CB_SETEDITSEL As Integer = &H142 Public Const CB_ADDSTRING As Integer = &H143 Public Const CB_DELETESTRING As Integer = &H144 Public Const CB_DIR As Integer = &H145 Public Const CB_GETCOUNT As Integer = &H146 Public Const CB_GETCURSEL As Integer = &H147 Public Const CB_GETLBTEXT As Integer = &H148 Public Const CB_GETLBTEXTLEN As Integer = &H149 Public Const CB_INSERTSTRING As Integer = &H14A Public Const CB_RESETCONTENT As Integer = &H14B Public Const CB_FINDSTRING As Integer = &H14C Public Const CB_SELECTSTRING As Integer = &H14D Public Const CB_SETCURSEL As Integer = &H14E Public Const CB_SHOWDROPDOWN As Integer = &H14F Public Const CB_GETITEMDATA As Integer = &H150 Public Const CB_SETITEMDATA As Integer = &H151 Public Const CB_GETDROPPEDCONTROLRECT As Integer = &H152 Public Const CB_SETITEMHEIGHT As Integer = &H153 Public Const CB_GETITEMHEIGHT As Integer = &H154 Public Const CB_SETEXTENDEDUI As Integer = &H155 Public Const CB_GETEXTENDEDUI As Integer = &H156 Public Const CB_GETDROPPEDSTATE As Integer = &H157 Public Const CB_FINDSTRINGEXACT As Integer = &H158 Public Const CB_SETLOCALE As Integer = 345 Public Const CB_GETLOCALE As Integer = 346 Public Const CB_GETTOPINDEX As Integer = 347 Public Const CB_SETTOPINDEX As Integer = 348 Public Const CB_GETHORIZONTALEXTENT As Integer = 349 Public Const CB_SETHORIZONTALEXTENT As Integer = 350 Public Const CB_GETDROPPEDWIDTH As Integer = 351 Public Const CB_SETDROPPEDWIDTH As Integer = 352 Public Const CB_INITSTORAGE As Integer = 353 Public Const CB_MSGMAX As Integer = 354
esta pagina es buena: Mensaje CB_ADDSTRINGy esta tambien: CB_ (Constants)saludos.
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
Funciono de maravillas en donde quería. Gracias por las constantes
Saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Saber si se selecciono algun item de un combo
Desarrollo Web
|
diego_lp
|
4
|
5,410
|
21 Diciembre 2010, 19:18 pm
por Shell Root
|
|
|
(Solucionado) Agregar seguridad a Guestbook
PHP
|
2Fac3R
|
3
|
3,455
|
26 Enero 2012, 23:11 pm
por 2Fac3R
|
|
|
(Solucionado) Como darle focus a un item al abrir el form
.NET (C#, VB.NET, ASP)
|
Eleкtro
|
7
|
6,518
|
23 Noviembre 2012, 11:41 am
por Eleкtro
|
|
|
Datagridview agregar columna con combo box(SOLUCIONADO)
Programación Visual Basic
|
01munrra
|
1
|
6,682
|
3 Abril 2016, 21:23 pm
por 01munrra
|
|
|
agregar un Item Fecha a una Lista prehecha
.NET (C#, VB.NET, ASP)
|
llogui
|
0
|
1,670
|
15 Septiembre 2016, 00:36 am
por llogui
|
|