Hola bueno, necesito que un form lea una .ini y que cree un PictureBox, y como es logico que le meta ya directamente todas sus properties....
Con que me deis un ejemplo funcional ya me las apaño, puesto que meter nuevas variables solo sera leer dos cosas y copiar y pegar y cambiar esas dos cosas... :silbar:
Un saludo.
Hombre, está claro que un archivo de texto no va a "crear" un control, lo que intenté decirte es que puedes leer en tiempo de ejecución los valores desde un INI para crear el picturebox en tiempo de ejecución.
Sigo sin saber exáctamente que es lo que quieres hacer, pero... :
Ejemplo:
test.ini
Nombre=PicBox
Dimensiones=300,300
BackColor=255,255,255
Class1.vb
dim picture_name as string
dim picture_dimensions as point
dim picture_color as color
Private sub leer_ini()
(
Aquí un procedimiento para leerl os valores del ini:
picture_name = valor1 del ini
picture_dimensions = new point(valor2 del ini.SPLIT(","))
picture_color = color.fromargb(valor3 del ini.SPLIT(","))
)
end sub
form_load()
leer_ini()
dim MyPictureBox as new picturebox
MyPictureBox.name = picture_name
MyPictureBox.size= picture_dimensions
MyPictureBox.color= picture_color
me.controls.add(MyPictureBox )
end sub
el code lo he escrito al vuelo, en la primera página de este subforo puedes encontrar un comentario mio sobre como cargar datos de un INI.
Salu2
Las picturebox tienen que estar precreadas? No quiero poner limite de modpacks a mis usuarios... Si te conectases a Skype te lo contaría XD
Por si no tienes pensado conectarte, mira esta imagen:
(http://i.imgur.com/pKR97zo.png)
Más o menos sabes lo que digo? >:D
Puedes definir el número de pictureboxes que serán, guardas ese número en el ini, y lo lees...
For i as int32 = 1 to (valor)
generar checkboxes
loop
no se si te refieres a hacer eso,
mañana hablamos por skype
A ver no... Las picture box tienen que ser infinitas... Las picturebox se tienen que ir "creando" conforme el usuario vaya instalando Modpacks, (es algo asi como un acceso directo) luego el usuario la selecciona y le da a jugary se ejecuta el juego. :P
Una pregunta no, no es posible dejar creados los picture box y darle a un visible true luego?
y si se crean demasiados crearlos en tiempo de ejecución como te dijo electro xD
Digo, es posible que se creen 300 picture como para hacerlos todos en ejecución?
Saludos.
O sacar provecho y no crear tanto picturebox
50 modpacks = Gratis
100 modpacks = 1.50$
500 modpacks = 5$
U.U soy malo con los precios ajjaja
Y como se mete en tiempo de ejecución?
Se supone que el ini tiene que servir para guardarlos y que no se borren cuando cierras la app y la vuelves a abrir. :rolleyes:
Cita de: SγиtαxEяяoя en 3 Junio 2013, 21:55 PM
O sacar provecho y no crear tanto picturebox
50 modpacks = Gratis
100 modpacks = 1.50$
500 modpacks = 5$
U.U soy malo con los precios ajjaja
Te van a denunciar y a llevar preso hombre jajajaja ladron!!!Cita de: Iкillnuкes en 3 Junio 2013, 22:01 PM
Y como se mete en tiempo de ejecución?
Se supone que el ini tiene que servir para guardarlos y que no se borren cuando cierras la app y la vuelves a abrir. :rolleyes:
Electro te puso un ejemplo, lo probaste? el ini usalo para guardar las propiedades de los picture, y los vas creando, recorriendo todo el ini asignando cada valor al picture correspondiente, que code tenes hasta el momento y te ayudamos.
Saludos!
Cita de: XresH en 3 Junio 2013, 21:47 PM
Digo, es posible que se creen 300 picture como para hacerlos todos en ejecución?
Si un array de controles de forma dinámica.
Cita de: Iкillnuкes en 3 Junio 2013, 20:55 PM
A ver no... Las picture box tienen que ser infinitas... Las picturebox se tienen que ir "creando" conforme el usuario vaya instalando Modpacks, (es algo asi como un acceso directo) luego el usuario la selecciona y le da a jugary se ejecuta el juego. :P
Pues "detecta" el número de modpacks que hay instalados y vas creando en tiempo de ejecución cada picturebox como te expliqué... "
For x to NúmeroDeModpacks"
Mírate mi post de snippets de vez en cuando, para algo está:
Dim chk_() As CheckBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Array_Size As Integer = 300 'change this for the number of controls that will appear
ReDim chk_(Array_Size)
For chk_num = 0 To Array_Size
Application.DoEvents()
chk_(chk_num) = New CheckBox
chk_(chk_num).Text = "Checkbox " + chk_num.ToString
chk_(chk_num).Top = 20 * chk_num
Me.Controls.Add(chk_(chk_num))
Next
End Sub
300 pictureboxes o cuantos quieras
Salu2
Pero si cierro la app se va a borrar ese control?
No estaba haciendo la pregunta en concreto :P me expresé mal, a lo que iba es que si era posible que un usuario en TU juego tenga que crear 300 pictures box o mas al iniciar la aplicación?
Ya que si el usuario crea maximo de 10, hazlos en tiempo de diseño y que luego aparezcan, y guardas todo solamente de un maximo de 10 picture o 20.
Cita de: Iкillnuкes en 3 Junio 2013, 22:07 PMPero si cierro la app se va a borrar ese control?
Claro.
No esperes añadir los pictureboxes de forma permanente, eso no puedes hacerlo, es imposible porque en el Source no están declarados, tienes que generar los controles desde el código.
No me parece que séa un problema que al cerrar la app "se eliminen", si al volver a iniciar la app se volverían a generar los controles (crear, nombrar, colocar, redimensionar, lo que quieras) gracias a tu INI.
Saludos
Eso es a lo que me refiero y con el code que me distes arriba ya se puede? :huh:
Cita de: Iкillnuкes en 4 Junio 2013, 07:51 AM
Eso es a lo que me refiero y con el code que me distes arriba ya se puede? :huh:
sip!
Ves haciéndolo y si te surge un problema al leer el valor del ini o al crear los pictureboxes te ayudo de mejor forma
Por cierto, para colocarlos dentro del panel:
panel1.controls.add(MyNewPanel)
PD: ya tienes el dubspet subido en la url que te dije, pero se me jodió la subida 2 veces y el server no tiene "resume" así q he subido solo accesos directos.
Ya te he contado lo que ha pasado intentaré solucionarlo para esta tarde pero no te prometo nada. :silbar:
ups... me equivoquñe de post al comentar xD (...tienes tantos).
http://foro.elhacker.net/net/scroll_de_imagenes-t391409.0.html;msg1858088#msg1858088
Sorry por el spam.
Soy muy noob, y no se como hacer lo del los controles en el tiempo de ejecucción...
Tengo este code:
Dim chk_() As PictureBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Array_Size As Integer = 100 'change this for the number of controls that will appear
ReDim chk_(Array_Size)
For chk_num = 0 To Array_Size
Application.DoEvents()
chk_(chk_num) = New PictureBox
chk_(chk_num).Text = "Checkbox " + chk_num.ToString
chk_(chk_num).Top = 20 * chk_num
Me.Controls.Add(chk_(chk_num))
Next
End Sub
A ver, cuando lo meto, no se genera nada....
Se supone que están creados y lo único que falta son mostrarlos?
Pero Seazoux, ya que haces un copy/paste al menos modifica lo de "chk_" por algo como "pcb_" para que en un futuro, al volver a leer ese código, entiendas lo que hiciste xD.
Los pictureboxes no tienen la propiedad "Text", así que elimina esa línea.
No los ves porque son transparentes, añádele un:
pcb_(pcb_num).BackColor = Color.Red
Y agranda el valor del "top" a 80 o 90, porque 20 lo puse para Checkboxes, y los pictureboxes por defecto son el triple de anchos que un checkbox, vas a ver una columna roja y ya.
Saludos
Tengo otra duda, he puesto Panel1.Controls.Add(Panel1)
Dentro del For, ahora los pics tienen las propiedades del Panel1 xD
Cita de: Ikillnukes en 7 Junio 2013, 07:44 AM
Tengo otra duda, he puesto Panel1.Controls.Add(Panel1)
Dentro del For, ahora los pics tienen las propiedades del Panel1 xD
Claro, las propiedades del container las heredan los controles que añades dentro del container...
pasa lo mismo si los creas/añades desde el designer.
Modifica las propiedades que consideres "conflictivas" del panel
un saludo
Cita de: EleKtro H@cker en 7 Junio 2013, 09:58 AM
Claro, las propiedades del container las heredan los controles que añades dentro del container... pasa lo mismo si los creas/añades desde el designer.
Modifica las propiedades que consideres "conflictivas" del panel
un saludo
Pero si le pongo un color de argb va a tomar ese color también el pic, teniendo ya puesto el pic la propiedad del argb?
Gracias por este snippet tan bueno... Ahora ya podré seguir...
Ahora tengo una duda... Tengo que contar el numero de pcbs que ya hay para saber a cual pcb se le va a asignar ese value...
Tendria que contar una frase o una palabra que fuese comun para todo el ini... Ahora la cosa es como cuento la veces que sale dicha palabra, estuve buscando en google pero na... :silbar:
IkillNukes,
me caes bien pero al menos yo desde luego no me voy a molestar en ayudar a alguien si priméramente esa persona no se digna a formular corréctamente una pregunta, mostrando código, mostrando el ini, siendo especifico y dando detalles, mostrando los put*s errores/excepciones, en fin mostrando los datos necesarios y que se vea que lo estás intentando, la verdad es que ya cansa mucho ver este tipo de preguntas tuyas, no porque seas pesado ni nada parecido, sino porque son preguntas sin ningún tipo de información por tu parte, sin sentido, solo pides las cosas ya hechas y ni siquiera se entiende lo que pides en la mayoría de los casos.
Si no dispones del tiempo suficiente para escribir todo lo necesario para poder formular una pregunta DECENTE para que en general los demás usuarios te podamos ENTENDER y de alguna manera te podamos RESPONDER y ayudar en lo que podamos, pues comprende que los demás usuarios tenemos aún menos tiempo para leer tonterías y contestarlas.
Espero que no te haya molestado, mi pequeña crítica constructiva.
Saludos!
Por eso digo siempre que te conectes a Skype, por ahí podemos hablar clara y lentamente Y pa colmo ni leo, ni explico bien...
La duda que he formulado arriba si se como resolverla.... Lo único que necesito saber es como contar cuantas veces se repite una palabra en un ini, asi de fácil... Yo mismo me lié formulando la pregunta (la de arriba) así que... XD
Cita de: Ikillnukes en 12 Junio 2013, 16:55 PMo único que necesito saber es como contar cuantas veces se repite una palabra en un ini
Hace tiempo posteé un snippet para eso:
#Region " Find String Ocurrences Function "
' [ Find String Ocurrences Function ]
'
' Examples :
'
' MsgBox(Find_String_Occurrences("Hello World", "o")) ' Result: 2
' MsgBox(Find_String_Occurrences("Hello me Hello you", "Hello")) ' Result: 2
Private Function Find_String_Occurrences(ByVal Input_String As String, ByVal Search_String As String) As Integer
Dim Input_String_Pos As Int32
Dim Input_String_Count As Int32
Do
Input_String_Pos = Input_String.IndexOf(Search_String, Input_String_Pos)
If Input_String_Pos <> -1 Then
Input_String_Count += 1
Input_String_Pos += Search_String.Length
End If
Loop Until Input_String_Pos = -1
Return Input_String_Count
End Function
#End Region
Bueno, pues estoy intentado algo tal que así:
Dim Array_Size As Integer = cuenta 'change this for the number of controls that will appear
ReDim pcb_(Array_Size)
For pcb_num = 0 To Array_Size
Application.DoEvents()
pcb_(pcb_num) = New PictureBox
pcb_(pcb_num).BackColor = Color.FromArgb(255, pcb_num * 3, pcb_num * 2, pcb_num)
pcb_(pcb_num).Height = 77
pcb_(pcb_num).Width = widaco
pcb_(pcb_num).Left = 36
pcb_(pcb_num).Top = 85 * pcb_num + 15
pcb_(pcb_num).BackgroundImage = Image.FromFile(".\Art\im\" & pcb_num + 1 & ".png")
pcb_(pcb_num).Image = Image.FromFile(INI_Manager.Load_Value(".\Test.ini", "FuncImg-" & pcb_num))
pcb_(pcb_num).Tag = pcb_num
Dim deel As Integer = Math.Abs(Int(Panel1.AutoScrollPosition.Y.ToString)) / altur
pcb_(deel + 2).Width = 200 'Aquí es donde tengo el conflicto, las pics no se cargan
Me.Controls.Add(pcb_(pcb_num))
pcb_(pcb_num).Parent = Panel1
AddHandler pcb_(pcb_num).Click, AddressOf pcb_Click
Next
Como observarás he vuelto a tu antiguo code....
Un saludo.
Detalles del error, etc?
saludos
Básicamente lo digo aquí:
Citarpcb_(deel + 2).Width = 200 'Aquí es donde tengo el conflicto, las pics no se cargan
Un saludo. :P
Eso ya lo leí, te pregunto si salta alguna excepción, ya que en esa línea no "cargas" los controles, solo modificas su tamaño, por eos me parece extraño que afirmes que el error está en esa linea.
saludos!
No me salta ninguna excepción, simplemente el panel se queda vacío. :-\
Esa línea es la errónea puesto que si la quito, vuelve todo a estar como estaba.
Pues prueba a poner un breakpoint o un msgbox para comprobar el valor "deel" antes de modificar el width... por cierto en el code modificas dos veces el width...
saludos
Ya añadí un MsgBox y va perfecto. Ehm ya se que hay 2 widths, uno es el que cambia y el otro es el que añade el width por default a cada uno de los pics. Voy a probar borrando ese width y activando el otro. :P
Ahora he borrado uno de los widths y antes de mostrar el code me suelta esta excepción:
CitarSystem.InvalidOperationException was unhandled
HResult=-2146233079
Message=Error al crear el formulario. Consulte Exception.InnerException para obtener más detalles. Error: Referencia a objeto no establecida como instancia de un objeto.
Source=IkillLauncher
StackTrace:
en WindowsApplication1.My.MyProject.MyForms.Create__Instance__[T](T Instance) en 17d14f5c-a337-4978-8281-53493378c1071.vb:línea 190
en WindowsApplication1.My.MyProject.MyForms.get_frmModpacks()
en WindowsApplication1.frmMinecraft.Label2_Click(Object sender, EventArgs e) en C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmMinecraft.vb:línea 134
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.Label.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
en System.Windows.Forms.Application.Run(ApplicationContext context)
en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
en WindowsApplication1.My.MyApplication.Main(String[] Args) en 17d14f5c-a337-4978-8281-53493378c1071.vb:línea 81
en System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
en System.Threading.ThreadHelper.ThreadStart()
InnerException: System.NullReferenceException
HResult=-2147467261
Message=Referencia a objeto no establecida como instancia de un objeto.
Source=IkillLauncher
StackTrace:
en WindowsApplication1.frmModpacks..ctor() en C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmModpacks.vb:línea 44
InnerException:
Si lo vuelvo a poner siempre toma el primero y si bajo el scroll no cambia el width de ninguna imagen. :-\
La linea 44 es justamente esta:
Dim deel As Integer = Math.Abs(Int(Panel1.AutoScrollPosition.Y.ToString)) / altur
Lo mismo pasa si pongo:
pcb_(3).Width = 200
Por ejemplo :/
CitarReferencia a objeto no establecida como instancia de un objeto.
Traducción: El objeto no existe.
Posible causa: Estás intentando llamar al panel cuando todavia no se ha creado/instanciado en la ventana del load.
Me apuesto mi casa entera a que tienes ese código de los pcbs() en el form load, muevelo todo al evento shown, no al load.
Saludos!
Perdona la ignorancia, cual es el evento shown? :xD
El que muestra el panel, o comorl? :rolleyes:
Cita de: Ikillnukes en 22 Junio 2013, 20:39 PMcual es el evento shown? :xD
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.shown.aspx
Esta "la perdono", porque yo al principio también me rallaba mucho cuando intentaba manejar controles en el evento load, pero es fácil de entender... el "form load" es para dejar cargar la ventana (el form) y sus controles, si intentas obtener el valor de un panel que todavía no se ha instanciado en el designer pues...kaboom (Referencia a objeto no establecida como instancia de un objeto.).
Saludos
Me parece que apuestas bien xD
Gracias a ese evento acabo de arreglar un bug de una excepción que llevaba tiempo ya jodiendo la marrana xD
Vale ahora salta esa excepción:
CitarSystem.NullReferenceException was unhandled
HResult=-2147467261
Message=Referencia a objeto no establecida como instancia de un objeto.
Source=IkillLauncher
StackTrace:
en WindowsApplication1.frmModpacks.frmModpacks_Shown(Object sender, EventArgs e) en C:\Users\Alvaro\Documents\IkillLauncher\IkillLauncher\frmModpacks.vb:línea 186
en System.Windows.Forms.Form.OnShown(EventArgs e)
en System.Windows.Forms.Form.CallShownEvent()
en System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
en System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
en System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
en System.Windows.Forms.Control.InvokeMarshaledCallbacks()
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
en System.Windows.Forms.ContainerControl.WndProc(Message& m)
en System.Windows.Forms.Form.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
en System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
en System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
en System.Windows.Forms.Application.Run(ApplicationContext context)
en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
en WindowsApplication1.My.MyApplication.Main(String[] Args) en 17d14f5c-a337-4978-8281-53493378c1071.vb:línea 81
en System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
en System.Threading.ThreadHelper.ThreadStart_Context(Object state)
en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
en System.Threading.ThreadHelper.ThreadStart()
InnerException:
Y no se porque no puedo declarar esto:
Dim deel As Integer = Math.Abs(Int(Panel1.AutoScrollPosition.Y.ToString)) / altur + 2
fuera de un evento. Es super raro, si lo declaro fuera me salta esa excepción, y si lo declaro dentro me salta esta otra que acabo de pegar. :-\
Gracias por perdonarmela, aunque bueno, yo ayudar más bien lo considero como dar el code hecho, ahora mismo, lo que estás haciendo es recomendarme que haga una cosa u otra,
en mi opinión. :P
Así es como me gustaría resolver mis dudas (las más sencillas) ;)
Por cierto, linea 186:
pcb_(deel).Width = 200
Creo que seguimos en las mismas, por lo menos ahora ese form si se me abre. :P
Ahora que vuelvo a ver la línea de la división ya está todo claro: "/"
...te recuerda eso algo?
PD: Bueno, no se si ese será el problema porque no se si la operación da como resultado un decimal o un entero, pero usa el otro operador...
Saludos!
Pues a ver, ehm tuve encuenta lo que dijistes, pero por igual, cuando pulso el botón y me suelta un MsgBox con un numero entero y no un decimal :P
PD: Ya lo he comprobado, pero, nanai, no tiene nada que ver, :(
A ver si me he enterado bien, los pcbs hay que crearlos desde Shown? Pues es super raro, me sigue diciendo que están sin crearse.
Y lo más probable es que cuando demos con la clave me mates :xD