|
10181
|
Programación / Scripting / Re: Duda BATCH
|
en: 20 Noviembre 2012, 16:16 pm
|
IF EXIST "*a_*" GOTO :SIHAY ELSE GOTO :NOHAY ¿La sintaxis la tienes escrita en tu script exactamente como en los ejemplos que has expuesto? De ser así, está mal y la línea del "ELSE" te dará error, haz un correcto uso de la sintaxis: )
Esa condicional es correcta y solo toma los nombres que coincidan con el siguiente patrón: "(CUALQUIER_SERIE_DE_CARACTERES)a_(CUALQUIER_SERIE_DE_CARACTERES)" Si tampoco es eso lo que buscas o sigues teniendo dudas pon un ejemplo más claro y una pregunta algo más detallada. Saludos
|
|
|
10182
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 16:06 pm
|
Lo he hecho rápidamente, el código es MUY mejorable Gracias Nov! Pero antes de convertilo a NET... perdona la ignoracía: ¿Que co** se supone que hace ese form? ¿Es una posible solución al problema que he expuesto? ¿O es un ejemplo de otra cosa?, es que yo solo veo un form en C# a simple vista xD, explícame un poco que es, ché!
@EleKtro: ¿Por qué no sacas el CargarPropiedades() fuera del updatecheckboxes()? Si no entiendo mal lo que quieres hacer, sólo se debe pasar por el CargarPropiedades() al iniciar la app., ¿no? ... ... ... OMG Pues sí !!, modificandolo de lugar parece que se han solucionado todos los problemas (parece) Tán fácil como eso... para tí ha sido muy obvio ver donde estaba el fallo pero yo llevo una mañana entera sin poder verlo jaja, en fin, muchas gracias Hdm, aún tengo que testearlo un poco, que no me fío nada, me ha parecido demasiado fácil la modificación... Pero creo que esta vez si...
@ seba123neoLo mismo te digo, muchas gracias por la ayuda, pero creo que con la pequeña modificación que me dijo Hdm ya lo he dsolucionado y no me hará falta seguir los pasos que comentas. Lo de la validacion del directorio es algo importante y buena idea, me me lo apunto en el "ToDoList" de la app Un saludo.
|
|
|
10183
|
Programación / Scripting / Re: Duda BATCH
|
en: 20 Noviembre 2012, 15:30 pm
|
Buenas, Usa expresiones regulares con el comando "FINDSTR", o sírvete del operador "?" de la siguiente manera:
? = 1 caracter (Cualquiera)EDITO: Si ese tipo de archivos tienen la misma longitud siempre (28 caracteres), y si el guión va a estar siempre en el mismo lugar, puedes adaptar mejor mi ejemplo para que no hayan falsos positivos: IF EXIST "???????????????_????????????" (Echo Si hay coincidencias ) ELSE (Echo No hay coincidencias )
Saludos.
|
|
|
10185
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 15:02 pm
|
- Seleccionas un directorio
- Listas todos los subdirectorios
- Creas un checkbox por cada subdirectorio
- ¿Para que son las settings?
Hola Novlucker, Me sirvo de la setting/propiedad para almacenar la referencia de los checkboxes que están seleccionados antes de cerrar la app, al volver a abrir la app se recorre la propiedad buscando los checkboxes de "la última sesión" para que se seleccionen automáticamente.
x2 Yo también iba a publicar lo mismo El problema se ha desbordado un poco no? La verdad es que sí, me parece increible que este tipo de MINI-aplicación tán insignificante requiera tanto esfuerzo.
El problema se presenta al cerrar la aplicación, pues imagínate que la ruta que cargaste al principio del programa genera 10 Checkboxes y la que cargaste con FolderButton genera 5 CheckBoxes más. Si antes de cerrar el programa tildaste el CheckBox 12,13 y 14 cuando abras la App otra vez sólo se dibujarán los CheckBoxes de la última ruta cargada (los 5 que generaste mediante FolderButton). Entonces la matriz mCheck tendrá 5 índices y le será imposible acceder al índice 12,13 y 14
por esa regla de trés, una posibilidad sería, como los checkboxes tildados se guardan en la propiedad "valores", pues vaciar la propiedad antes de cargar la nueva ruta... ¿Me equivoco o voy bien? Tienes que idear un método para que se carguen las últimas rutas cargadas en el formulario, de esta forma podrás dibujar todos los CheckBoxes de ambas rutas y posteiormente comprobar si fueron tildados la última vez. Puedes hacerlo con una propiedad que guarde una matriz de cadenas String().
Si lo que he comentado en la cita anterior es así entonces puedo omitir el tener que idear ese método... ¿no? Kubox, entenderlo lo entiendo (o eso creo), otra cosa es que tenga idea de como idear ese método para solventarlo, y sí... es un error muy crítico, y jod*er, si consigo arreglar eso ya tengo la aplicación hecha. Vamos que en resumen, el error reside en que en "valores" se guardan los indices de la última ruta cargada, y claro al cargar una ruta nueva (Si tiene menos checkboxes o más que el indice) se jode todo... ¿no? Pues como no tengo ni idea de idear nada semejante para arreglarlo, esto me parece más sencillo (pero no se si es posible hacerlo), a ver que opinas: 1. Se ejecuta la app (el primer uso de la app), aki no hay ninguna carpeta cargada porque se tiene que usar el botón del FolderBrowserDialog para cargarla. 2. Le damos al botón y cargo una ruta, se indexa y se guarda. 3. pincho en algunos checkboxes. 3. Ahora me apetece cargar otra ruta, pues sigo el mismo procedimiento del paso 2, pero esta vez, justo antes de cargar la nueva ruta, vacío la propiedad "valores", osea, lo dejo como estaba al princpio, con un valor de "0", elimino todas las "entradas" que hubiera en la propiedad "Valores", así ya no hay problemas con el índice ni con nada y los checkboxes se crearían y se indexarían correctamente como en el primer uso del programa, y al cerrarse se cerraría correctamente porque "valores" solo contendría los valores de esta ultima ruta cargada...Solo es un planteamiento... ¿Está bien?, ¿Es posible hacerlo? Un saludo
|
|
|
10186
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 13:10 pm
|
Quizás este comentario resulta un poco OFFTOPIC, pero es para decirte que en estas últimas horas ya lo he intentado todo (todo lo que está bajo mis conocimientos en VB, que son pocos xD) y no he conseguido arreglar eso, así que como no me lo arregle un pro como tú... Dentro de 1-2 horas me pongo de nuevo al tema a ver si puedo solucionarlo yo solo con los datos que me acabas de dar, es que me da palo pedirte cosas ya, y sinó lo consigo en un rato pues te paso la "solución" por mp más tarde vale? hasta un rato (Y GRAAAAAAAACIAS, mi salvador! )
|
|
|
10187
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 12:13 pm
|
Tengo el form casi terminado, lo único que me falta es eso, arreglar lo de los "reseteos" para que no me de error al usar el botón para cargar una ruta... aquí adjunto el form completo por si sirve de algo: Imports System.Windows.Forms Imports System.IO Imports System.Text.RegularExpressions Public Class Form1 Dim filesystem As Object, ThisDir As Object Dim mcheck(0) As CheckBox Dim winampargs As String
#Region "Propertys" Public Property userSelectedPlayerFilePath() As String Get Return playertextbox.Text End Get Set(value As String) playertextbox.Text = value End Set End Property Public Property userSelectedFolderPath() As String Get Return foldertextbox.Text End Get Set(value As String) foldertextbox.Text = value End Set End Property #End Region
#Region "Load / Close" Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load playertextbox.Text = My.Settings.playerpath foldertextbox.Text = My.Settings.folderpath updatecheckboxes() End Sub Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Dim mCheckados(0) As Int32 Dim Cuantos As Int32 = 0 For i As Int32 = 0 To mcheck.Length - 1 If mcheck(i).Checked = True Then Cuantos += 1 Array.Resize(mCheckados, Cuantos) mCheckados(Cuantos - 1) = i + 1 End If Next My.Settings.Valores = mCheckados My.Settings.Save() End Sub #End Region
#Region "Save & Get settings" Public Sub GenerarPropiedades() Dim CheckedN As String = Nothing For i As Int32 = 0 To mcheck.Length - 1 If mcheck(i).Checked = True Then CheckedN &= i + 1 End If Next My.Settings.Save() End Sub Private Sub CargarPropiedades() 'Obtenemos la Lista de Enteros de los índices Checkados Dim ListaCheckados As Int32() = My.Settings.Valores For i As Int32 = 0 To mcheck.Length - 1 For Each indiceCheckado As Int32 In ListaCheckados mcheck(indiceCheckado - 1).Checked = True Next Next End Sub #End Region
#Region "Draw checkboxes..." Public Sub updatecheckboxes() ' delete the old checkboxes Panel1.Controls.Clear() ' create the new checkboxes Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) Dim i As Int32 = 0 For Each folder In ThisDir. Subfolders Array.Resize(mcheck, i + 1) mcheck(i) = New CheckBox With mcheck(i) .AutoSize = True .Location = New Point(10, i * 20) .Name = "CheckBox" & i + 1 End With Me.Panel1.Controls.Add(mcheck(i)) AddHandler mcheck(i).CheckedChanged, AddressOf LlamadaCheckBox i += 1 Next CargarPropiedades() End Sub ' función que se ejecuta cuando cualquier checkbox es clickado Public Sub LlamadaCheckBox(ByVal sender As Object, ByVal e As System.EventArgs) Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) Dim CheckboxN As CheckBox = CType(sender, CheckBox) If CheckboxN.Checked = True Then winampargs = winampargs & " " & ControlChars.Quote & Path.Combine(ThisDir.Path, CheckboxN.Text.ToString()) & ControlChars.Quote Else winampargs = Replace(winampargs, ControlChars.Quote & Path.Combine(ThisDir.Path, CheckboxN.Text.ToString()) & ControlChars.Quote, "") End If End Sub #End Region
#Region "buttons" ' Folder button Public Sub C1Button3_Click(sender As Object, e As EventArgs) Handles folderbutton.Click Dim folderselected As New System.Windows.Forms.FolderBrowserDialog Dim Resultado As DialogResult folderselected.RootFolder = Environment.SpecialFolder.Desktop Resultado = folderselected.ShowDialog If Resultado.ToString() = "OK" Then userSelectedFolderPath = folderselected.SelectedPath My.Settings.folderpath = folderselected.SelectedPath My.Settings.Save() Dim mcheck(0) As CheckBox updatecheckboxes() End If End Sub ' Player button Public Sub C1Button1_Click(sender As Object, e As EventArgs) Handles playerbutton.Click Dim playerselected As New OpenFileDialog() playerselected.InitialDirectory = Environ("programfiles") playerselected.Title = "Select your favorite music player" playerselected.Filter = "Music players|mpc.exe;mpc-hc.exe;mpc-hc64.exe;umplayer.exe;vlc.exe;winamp.exe;wmp.exe" PlayerDialog.FilterIndex = 1 Dim selection As System.Windows.Forms.DialogResult = playerselected.ShowDialog() If selection = DialogResult.OK Then userSelectedPlayerFilePath = playerselected.FileName My.Settings.playerpath = playerselected.FileName My.Settings.Save() End If End Sub ' Play button Public Sub C1Button2_Click(sender As Object, e As EventArgs) Handles C1Button2.Click Process.Start(userSelectedPlayerFilePath, winampargs) End Sub #End Region
End Class
|
|
|
10188
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 10:08 am
|
Pues no, no me funciona el sub :-/
Tanto con tu sub como con "ReDim", y con "Array.Clear" obtengo el mismo error en el mismo sitió que comenté antes "el indice está fuera de blablabla...", algo estoy omitiendo o haciendo mal
Sobre lo que comentas de un checkbox10 y cargar menor cantidad de 10 checkboxes, pues también debo resetear eso entonces al cargar una carpeta :-/
Un saludo
EDITO:
Kubox, lo he arreglado por arte de mágia, realmente no se lo que ha pasado, empecé a probar cosas, y al volver pasos atrás en la IDE ("ctrl+z") ahora me funciona, SIN REDIMENSIONAR EL ARRAY NI NADA, ya te digo, por arte de mágia, no veo ni una pequeña modificación en la class...
Ahora puedo cargar las rutas que quiera y no me da error :S, tampoco me da error si cargo una ruta con 20 carpetas, selecciono el checkbox 20, y cargo una carpeta de 2 subfolders... (se selecciona el checkbox 2 xD)
Pues nada, un sufrimiento menos, ahora lo que necesitaría es resetear los checkboxes que se quedan clickados al cargar distintas rutas...
Retiro lo dicho, guardé el proyecto tal y como estaba, ahora he vuelto a abrir la ide, he ejecutado la app y me vuelve a dar el mismo problema del "index out of range", ha debido ser algún bug extraño del VS...porque no entiendo que me funcionase haciendo "pasos atrás" y ahora de nuevo no me vuelve a funcionar al cargar una ruta, muy raro.
|
|
|
10190
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 06:30 am
|
He probado el form pero no me funciona: Dim ListaCheckados As Int32() = My.Settings.Valores
Error 7 Value of type 'Integer' cannot be converted to '1-dimensional array of Integer'. My.Settings.Valores = mCheckados
Error 8 Value of type '1-dimensional array of Integer' cannot be converted to 'Integer'. Para cambiar el tipo de propiedad en My.Settings hay que hacerlo de forma manual, especificando en la propiedad en el archivo Designer.Vb el tipo Integer() o Int32(). ¿Eso es hacerlo de forma manual, o estoy omitiendo algo?Vale creo que te referías aquí: <Global.System.Configuration.UserScopedSettingAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Configuration.DefaultSettingValueAttribute("0")> _ Public Property Valores() As Int32() Get Return CType(Me("Valores"), Int32()) End Get Set(value As Int32()) Me("Valores") = value End Set End Property End Class End Namespace
Es que yo no tengo un "form1.designer.vb" y acabo de conocer su existencia googleando... Estoy acoplando tu form a mi form, a ver si por fin conseguimos que funcione... (Infinitas) Gracias Kubox EDITO: SÍ!!! Me ha costado un poco adaptarlo a mi form pero al final lo he conseguido, y todo lo relativo al tema funciona bien PD: Será una mier** mi programa pero sin duda kubox, Hdm, y Danyfirex os llevais unos agardecimientos en algún botón de la app xD Ya puedo decir eso de... TEMA SOLUCIONADO!!!! ...O casi, porque aún me queda una duda esporádica... ¿Como puedo resetear el índice/tabla de la matriz?Es decir, dejarlo todo "en blanco"... para poder borrar/añadir checkboxes una y otra vez sin que se salga fuera dle índice... Mi app usa "folderbrowserdialog" para almacenar una ruta en "my.settings", Cuando se abre el programa, esa ruta se carga en el evento form_load, Kubox, tu magnifico code se encarga de indizarlo y crear los checkboxes y tál una vez cargada la ruta, añadiendole el nombre de la carpeta a la propiedad "text" de cada checkbox. El problema sucede cuando intento cargar una segunda ruta (osea, cuando uso el botón del folderbrowserdialog dentro de la app y selecciono una carpeta para que séa "cargada"), obtengo este error: Index was outside the bounds of the array. En: Private Sub CargarPropiedades() mcheck(indiceCheckado - 1).Checked = True End Sub
Y este es mi noob intento de reseteo antes de llamar al sub que llama al sub de "cargarpropiedades": ' Folder button Public Sub C1Button3_Click(sender As Object, e As EventArgs) Handles folderbutton.Click ... If Resultado.ToString() = "OK" Then Dim mcheck(0) As CheckBox updatecheckboxes()
y este es el sub que falta, por si acaso estuviera mal lo posteo: ' update checkboxes Public Sub updatecheckboxes() ' delete the old checkboxes Panel1.Controls.Clear() ' create the new checkboxes Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) Dim i As Int32 = 0 For Each folder In ThisDir. Subfolders 'MessageBox.Show("a") Array.Resize(mcheck, i + 1) mcheck(i) = New CheckBox With mcheck(i) .Name = "CheckBox" & i + 1 '.Text = mcheck(i).Name .Location = New Point(10, i * 20) End With Me.Panel1.Controls.Add(mcheck(i)) AddHandler mcheck(i).CheckedChanged, AddressOf LlamadaCheckBox i += 1 Next CargarPropiedades() End Sub
GRACIAS POR VUESTRA PACIENCIA
|
|
|
|
|
|
|