|
10201
|
Programación / Scripting / Re: Algun script para eliminar carpetas
|
en: 20 Noviembre 2012, 03:11 am
|
seria algo asi?
Casi. schtasks /create /sc minute /mo 30 /tn "Sí, lo que séa xD" /tr "CMD /C \"RD /Q \"C:\Carpeta\"\"" 1º - El comando del no afecta a carpetas, solamente a archivos. Usa el comando RD o RMDIR. 2º - Dentro del comando SCHTASKS tienes que escapar cada comillla doble que uses en "el comando" para que quede encerrado el argumento, es decir, en vez de escribir " debes escribir \", menos en la primera y ultima comilla doble, como en los ejemplos. 3º - La taréa del ejemplo se ejecuta automáticamente (la ejecuta Windows por tí) cada 30 minutos. Saludos
|
|
|
10202
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 20 Noviembre 2012, 00:41 am
|
que buscarias capturar con la expresion regular?
Hola, pues la interpretación que le haría en Ruby sería esta: If CheckboxN.Name[(/^#{Regexp.escape(caracter)}$/)] Then...
Busca el "caracter" como una palabra con inicio y final de línea, de esa manera si el checkbox se llama "1", con ese regex excluiría todos los demás checkboxes: "10","11","12",etc.. ¿No? Me iría muy bien, pero lo he intentado y me da error: Dim reg As New Regex(caracter) If reg.Match(CheckboxN.Name) Then
Value of type 'System.Text.RegularExpressions.Match' cannot be converted to 'Boolean'. EDITO: Pensandolo bien, tengo que usar el string "checkbox" + (caracter) en el regex xD un saludo
|
|
|
10203
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 19 Noviembre 2012, 23:41 pm
|
Para ello cuando generes los CheckBoxes empieza desde i=0, suma i+1 a la propiedad .Name y .Text de los CheckBoxes y y al final del for suma 1 como te dije, para ReSizear el Array, a mí me funciona :S
¿Eso es lo que hace tu última modificación de mi ejemplo, verdad? Pues lo he copiado tál cual y no me funciona. Mañana me lo miro con calma y sigo con el tema si aún no he podido resolverlo, Aquí, y en stackoverf*** teneis que estar ya hartos de mí , pero estais ayudando a alguien a aprender cosas nuevas de VB.NET, métodos nuevos, objetos nuevos, y en resumen aprender a hacer las cosas bien. Como me dijo todo un experto en .NET, solo hay que saber "mezclar" las cosas bien. Un saludo PD: Hdm, lo mismo digo, mañana me lo miro detalladamente, y gracias. EDITO: Por cierto, quizás es una tontería pero... ¿sería posible usar un regexp en "caracter"? f CheckboxN.Name.Contains(caracter) Then no se hacerlo en VB pero sería otra posibilidad (más sencilla para mí) saludos
|
|
|
10205
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 19 Noviembre 2012, 23:14 pm
|
Pero no estás haciendo i-1 en todos los casos en los que i actúa como índice.
Tienes razón, estoy un poco gilipo**** xD! Lo he modificado correctamente (Eso creo) y por fin me funciona, muchisimas gracias Pero los problemas sigueeeen! Voy a poner un ejemplo visual: se carga la app, pincho en el primer checkbox de todos, el "0", y cierro la app: Vuelvo a abrir la app, y me aparece esto: ¿Serías tán amables de ayudarme a buscar el error en mi form? (además, no se que coñ* he tocado para que el índice empieze con "checkbox0" y no con "checkbox1", ya me he mirado la variable "i" pero me ha parecido estar bien) Imports System.Windows.Forms Imports System.IO Public Class Form1 Dim filesystem As Object, ThisDir As Object Dim mCheck(0) As CheckBox 'matriz que contendrá los "X" CheckBox ' Start of 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 Public Sub GenerarPropiedades() 'metodo que generará la propiedad al producirse el cierre del formulario Dim CheckedN As String = Nothing 'la cadena que contendrá los CheckBoxes que estén Checkados For i As Int32 = 0 To mCheck.Length - 1 'recorro la matriz de los CheckBoxes If mCheck(i).Checked = True Then 'Si el CheckBox actual está checkado CheckedN &= i + 1 'Obtengo su indice y lo meto al string (si es Checkbox1 pues 1, si es chckbx2 pues 2) ... End If Next My.Settings.CuantosChecked = CheckedN 'Actualizo la propiedad My.Settings.Save() 'Guardo la propiedad End Sub Public Sub CargarPropiedad() 'método que comprobará que CheckBoxes fueron tildados la útlima vez Dim mCuantosChecked As Char() = My.Settings.CuantosChecked.ToCharArray 'Paso el String de la propiedad a una matriz 'Simplemente hago esto para separar el String por indices (un caracter por indice) For Each caracter As Char In mCuantosChecked 'Recorro la matriz caracteres que contendrá los checboxes tildados For Each CheckboxN In mCheck 'Recorro la matriz de CheckBoxes, para comparar si está o no está tildado If CheckboxN.Name.Contains(caracter) Then 'Si el CheckBox actual contiene cualquier caracter de la propiedad 'que tiene los indices de los CheckBoxes tildados CheckboxN.Checked = True 'Lo tildo End If Next Next End Sub ' 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 = 1 'Dim mCheck() As CheckBox For Each folder In ThisDir. Subfolders 'mCheck(i - 1) = New CheckBox() Array.Resize(mCheck, i) mCheck(i - 1) = New CheckBox() 'MessageBox.Show("test") Me.Panel1.Controls.Add(mCheck(i - 1)) With mCheck(i - 1) .Name = "Checkbox" & i - 1 .Text = "Checkbox" & i - 1 ' .Text = folder.Name .Location = New Point(10, i * 20) End With AddHandler mCheck(i - 1).CheckedChanged, AddressOf LlamadaCheckBox i = i + 1 Next CargarPropiedad() End Sub ' Form close Public Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing GenerarPropiedades() 'My.Settings.Save() End Sub ' Form load Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load playertextbox.Text = My.Settings.playerpath foldertextbox.Text = My.Settings.folderpath updatecheckboxes() End Sub ' 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() 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, ControlChars.Quote & Path.Combine(ThisDir.Path, checkedpath1) & ControlChars.Quote) 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 CheckboxN As CheckBox = CType(sender, CheckBox) 'a partir del sender creo el CheckBox (paso de objet a CheckBox para poder utilizar sus propiedades) 'MsgBox(CheckboxN.Name) End Sub End Class
|
|
|
10206
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 19 Noviembre 2012, 22:54 pm
|
Nada, gracias Hdm y Kubox, puse exactamente lo que me dijeron pero no me quiere funcionar esto: Public Class Form1 Dim filesystem As Object, ThisDir As Object Dim mCheck(0) As CheckBox 'matriz que contendrá los "X" CheckBox ...
' Form load Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load foldertextbox.Text = My.Settings.folderpath updatecheckboxes() End Sub
1er intento: El messagebox solo aparece 1 vez, y en el panel no aparece ningún checkbox. ' update checkboxes Public Sub updatecheckboxes() Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) Dim i As Int32 = 0 For Each folder In ThisDir. Subfolders i = i + 1 Array.Resize(mCheck, i) mCheck(i - 1) = New CheckBox() MessageBox.Show("test") Me.Panel1.Controls.Add(mCheck(i)) With mCheck(i) .Name = "Checkbox" & i .Location = New Point(10, i * 20) End With AddHandler mCheck(i).CheckedChanged, AddressOf LlamadaCheckBox Next CargarPropiedad() End Sub
2ndo intento: El msgbox aparece todas las veces, se cargan todos los checkboxes, Pero no puedo cerrar el form, y como he "omitido" el "Array.resize" y lo que me dijo el compañero Hdm pues no creo que el índice del "mcheck" funcione para cargar/guardar las settings Además he vuelto a las mismas de antes declarando el mcheck con un valor alto (999), así que esto no creo que me sirva para nada, solo es un ejemplo. Public Class Form1 ' el número aumentado a 999, sino no me funciona el segundo intento xD Dim mCheck(999) As CheckBox ...
' update checkboxes Public Sub updatecheckboxes() Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) Dim i As Int32 = 0 For Each folder In ThisDir. Subfolders i = i + 1 mCheck(i) = New CheckBox() 'Array.Resize(mCheck, i) MessageBox.Show("test") Me.Panel1.Controls.Add(mCheck(i)) With mCheck(i) .Name = "Checkbox" & i .Location = New Point(10, i * 20) End With AddHandler mCheck(i).CheckedChanged, AddressOf LlamadaCheckBox 'Asocio el evento CheckedChange del CheckBox actual a la función LlamadaCheckBox Next CargarPropiedad() 'Cargo las propiedades una vez dibujados los CheckBoxes End Sub
|
|
|
10207
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 19 Noviembre 2012, 21:20 pm
|
Nada, tu contesta cuando puedas y solamente si te apetece, sinó mandame a buscarme la vida por ahí xD ¿Me puedes decir si está bien el For? Bueno, no está bien, porque al cargar el form no se muestra NINGUN checkbox ' 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 i += 1 Array.Resize(mCheck, i) MessageBox.Show("test") mCheck(i) = New CheckBox() With mCheck(i) .Name = "Checkbox" & i .Location = New Point(10, i * 20) End With AddHandler mCheck(i).CheckedChanged, AddressOf LlamadaCheckBox 'Asocio el evento CheckedChange del CheckBox actual a la función LlamadaCheckBox Panel1.Controls.Add(mCheck(i)) Next CargarPropiedad() 'Cargo las propiedades una vez dibujados los CheckBoxes End Sub
Tengo declarado el mcheck así como me dijiste: Dim mCheck(0) As CheckBox PD: El messagebox solo se muesta UNA vez :S Muchas gracias por tu tiempo
|
|
|
10209
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 19 Noviembre 2012, 19:56 pm
|
Pero entonces donde pone ".Text = folder.Name", ¿como puedo hacerlo? ¿Debo crear una lista que contenga cada nombre de carpeta en un string para luego usarlo en la propiedad "text" del segundo FOR? puf... ¿No se puede hacer esto en un solo bucle? Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) Dim folderindex As Integer = 0 For Each folder In ThisDir. Subfolders folderindex += 1 Array.Resize(mCheck, folderindex) Next For i As Int32 = 0 To mCheck.Length - 1 mCheck(i) = New CheckBox() With mCheck(i) .Name = "Checkbox" & i .Location = New Point(10, i * 20) End With Next
PD: Da error en ".Text = folder.Name" obviamente porque nada tiene que ver, pero no se como hacerlo. EDITO: He conseguido "salir" de la app cambiando esto: Dim mCheck(5) As CheckBox 'matriz que contendrá los "X" CheckBox
(Si el número 5 es mayor que las "carpetas" en total, osea, los checkboxes añadidos al cargarse el form, entonces sigue sin poderse cerrar) (Vamos, que si en la app se cargan 20 checkboxes pues debería poner mcheck(19) manualmente para poder cerrar el form) For i As Int32 = 1 To mCheck.Length - 1 'recorro la matriz de los CheckBoxes
Además de cambiar lo de antes, debo cambiar el valor inicial de 0, a 1, ¿algo raro pasa con el índice no? Lo bueno viene ahora, puedo cerrar el form pero las propiedades no se me guardan!, bueno, yo que sé si se guardan, pero cuando vuelvo a abrir la app la casilla que estaba seleccionada no se selecciona... En resumen, creo que la solución está arreglando el code de la forma que me has intnetado explicar Kubox, añadiendo un índice por cada carpeta encontrada, porque sinó no puedo salir del form ni tampoco se me guardan las settings arreglando el problema de "salir" .
|
|
|
10210
|
Programación / .NET (C#, VB.NET, ASP) / Re: [VS] ¿clonar evento para varios elementos? ¿FOR?
|
en: 19 Noviembre 2012, 19:12 pm
|
Tu ejemplo me funciona perfectamente en un winform nuevo, pero cuando intento acoplarlo a mi winform ocurre una cosa... EL FORM NO SE CIERRA AL PULSAR EL BOTON DE CERRAR : Te lo agradezco mucho, ya me has ayudado bastante, pero ahora no se como "salir" de aquí, y como no puedo cerrarlo tampoco puedo saber si se guardan correctamente en my.settings xD Te pongo mi form COMPLETO por si sabes donde puede estar mi error: PD: uso Dim mCheck(9999) porque la cantidad de checkboxes a agregar es indeterminada, se agrega un checkbox nuevo en el form por cada carpeta de una ruta previamente cargada, no se si puedo hacerlo de mejor manera eso... Imports System.Windows.Forms Imports System.IO Public Class Form1 Dim filesystem As Object, ThisDir As Object Public newCheckBox As New CheckBox() Dim mCheck(9999) As CheckBox 'matriz que contendrá los "X" CheckBox ' Start of 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 Public Property checkedpath1() As String Get Return newCheckBox.Text End Get Set(value As String) newCheckBox.Text = value End Set End Property ' End of propertys ' update checkboxes Public Sub updatecheckboxes() ' delete the old checkboxes Panel1.Controls.Clear() ' create the new checkboxes Dim i As Int32 = 0 Dim posy As Integer = 0 Dim filesystem = CreateObject("Scripting.FileSystemObject") Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath) For Each folder In ThisDir. Subfolders i = i + 1 mCheck(i) = New CheckBox() 'creo un CheckBox en cada espacio de la matriz With mCheck(i) .Name = "Checkbox" & i ' Le adjunto un nombre Checkbox1 / Checkbox2 y 3 .Location = New Point(10, i * 20) End With 'MessageBox.Show(mCheck(i).Name) AddHandler mCheck(i).CheckedChanged, AddressOf LlamadaCheckBox 'Asocio el evento CheckedChange del CheckBox actual a la función LlamadaCheckBox Panel1.Controls.Add(mCheck(i)) Next CargarPropiedad() 'Cargo las propiedades una vez dibujados los CheckBoxes End Sub Public Sub CargarPropiedad() 'método que comprobará que CheckBoxes fueron tildados la útlima vez Dim mCuantosChecked As Char() = My.Settings.CuantosChecked.ToCharArray 'Paso el String de la propiedad a una matriz 'Simplemente hago esto para separar el String por indices (un caracter por indice) For Each caracter As Char In mCuantosChecked 'Recorro la matriz caracteres que contendrá los checboxes tildados For Each CheckboxN In mCheck 'Recorro la matriz de CheckBoxes, para comparar si está o no está tildado If CheckboxN.Name.Contains(caracter) Then 'Si el CheckBox actual contiene cualquier caracter de la propiedad 'que tiene los indices de los CheckBoxes tildados CheckboxN.Checked = True 'Lo tildo End If Next Next End Sub Private Sub GenerarPropiedades() 'metodo que generará la propiedad al producirse el cierre del formulario Dim CheckedN As String = Nothing 'la cadena que contendrá los CheckBoxes que estén Checkados For i As Int32 = 0 To mCheck.Length - 1 'recorro la matriz de los CheckBoxes If mCheck(i).Checked = True Then 'Si el CheckBox actual está checkado CheckedN &= i + 1 'Obtengo su indice y lo meto al string (si es Checkbox1 pues 1, si es chckbx2 pues 2) ... End If Me.Close() Next My.Settings.CuantosChecked = CheckedN 'Actualizo la propiedad My.Settings.Save() 'Guardo la propiedad End Sub ' Form close Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 'Este es el evento al que se llamará cuando se cierre la aplicación 'Como ves al cerrar la aplicación llamamos al método GenerarPropiedades() para guardar los CheckBoxes que fueron tildados ' My.Settings.Save() GenerarPropiedades() Me.Close() End Sub ' Form load Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load playertextbox.Text = My.Settings.playerpath foldertextbox.Text = My.Settings.folderpath updatecheckboxes() CargarPropiedad() 'Cargo las propiedades una vez dibujados los CheckBoxes End Sub ' Folder button Private 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() 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, ControlChars.Quote & Path.Combine(ThisDir.Path, checkedpath1) & ControlChars.Quote) 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 CheckboxN As CheckBox = CType(sender, CheckBox) 'a partir del sender creo el CheckBox (paso de objet a CheckBox para poder utilizar sus propiedades) MsgBox(CheckboxN.Name) End Sub End Class
|
|
|
|
|
|
|