Ayuda con almacenar ruta

Iniciado por SγиtαxEяяoя, 13 Julio 2013, 18:35 PM

0 Miembros y 1 Visitante están viendo este tema.

SγиtαxEяяoя

Hola tengo un problema algo grande, estoy con el proyecto de crear un programa que cree una carpeta o que se seleccione una carpeta personalizada para guardar Screenshots

Algo asi


Al abrir el programa se crea automaticamente la ruta "C:\Users\Tavito\Desktop\Screenshots"

Código (vbnet) [Seleccionar]

Imports System.IO 'Todo el codigo esta resumido por partes
Public Class Form1
   Private Folder As String 'Crea la ruta de la carpeta "Screenshots"

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Screenshots")
       If Not Directory.Exists(Folder) Then 'Si no existe dicho directorio
           Directory.CreateDirectory(Folder) 'Entonces lo crear
       End If
       LabelFolder.Text = Folder 'Y en el "LabelFolder" muestra la ruta que se creo
   End Sub


Pero, si yo quiero seleccionar otra carpeta



Código (vbnet) [Seleccionar]

Private Sub CheckFolder_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckFolder.CheckedChanged
       If CheckFolder.Checked = True Then
           FolderBrowserDialog1.ShowDialog()
           LabelFolder.Text = FolderBrowserDialog1.SelectedPath() 'Aqui va la ruta de la carpeta que se selecciono
       Else
           LabelFolder.Text = Folder 'Si por algun motivo quiero usar nuevamente la carpeta "Screenshots". Pero la elimine por accidente
           CheckFolder.Checked = False
           Folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Screenshots")
           If Not Directory.Exists(Folder) Then
               Directory.CreateDirectory(Folder)
           End If
       End If
   End Sub


El proceso de crear la carpeta no me da ningun problema, el problema esta aqui al tomar la captura de pantalla

Resumire el codigo por partes

Código (vbnet) [Seleccionar]
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Imaging
Public Class Form1

   Private Folder As String 'Crea la ruta de la carpeta
   Private Nombre As String = "Image " 'Aqui asigna el nombre a todas las imagenes
   Private Template As String

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       'Aqui almacena los formatos de las imagenes
       ComboBox1.DataSource = New ImageFormat() {ImageFormat.Bmp, ImageFormat.Gif, ImageFormat.Jpeg, ImageFormat.Png, ImageFormat.Tiff}
   End Sub


   Dim bmp As Bitmap
   Dim graphics As Graphics

   Private Sub ButtonScreen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonScreen.Click
       Dim SearchPattern As String = String.Concat(Nombre, "??.", ComboBox1.SelectedItem)
       Dim Files As String() = Directory.GetFiles(Folder, SearchPattern)
       Dim Numb As Integer = 0
       If Files.Length > 0 Then
           Array.Sort(Files)
           Numb = Integer.Parse(Files(Files.Length - 1).Substring(Template.Length, 2)) + 1
       End If
       Dim Bmp As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb)
       Using Grap As Graphics = graphics.FromImage(Bmp)
           Grap.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy)
           Dim Format As ImageFormat = DirectCast(ComboBox1.SelectedItem, ImageFormat)
           Bmp.Save(String.Concat(Template, Numb.ToString("00"), ".", Format), Format)
       End Using
   End Sub


El problema esta aqui
Código (vbnet) [Seleccionar]
Dim Files As String() = Directory.GetFiles(Folder, SearchPattern)

De que Folder, no vale lo que yo selecciono en el "BrowserDialog1.SelectedPath"

Solo funciona si dejo la ruta que yo mismo proporciono al abrir el programa

Folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Screenshots")


Ahora si la duda como hago para que
Código (vbnet) [Seleccionar]
Dim Files As String() = Directory.GetFiles(Folder, SearchPattern)
Almacene la ruta seleccionada en el "LabelFolder" y guarde las imagenes en la carpeta seleccionada

Eleкtro

Cita de: SγиtαxEяяoя en 13 Julio 2013, 18:35 PM
Código (vbnet) [Seleccionar]
Private Sub CheckFolder_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckFolder.CheckedChanged
       If CheckFolder.Checked = True Then
           FolderBrowserDialog1.ShowDialog()
           LabelFolder.Text = FolderBrowserDialog1.SelectedPath() 'Aqui va la ruta de la carpeta que se selecciono
       Else
           LabelFolder.Text = Folder 'Si por algun motivo quiero usar nuevamente la carpeta "Screenshots". Pero la elimine por accidente
           CheckFolder.Checked = False
           Folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Screenshots")
           If Not Directory.Exists(Folder) Then
               Directory.CreateDirectory(Folder)
           End If
       End If
   End Sub

El problema es que en ningún caso estás asignando la carpeta seleccionada (FolderBrowserDialog1.SelectedPath) a la variable Folder, así que la variable Folder siempre es: blablabla.Desktop & "Screenshots"

¿Resuelve eso tu duda?

Otra cosa (Sin importancia) a tener en cuenta en el código, es esto:
Código (vbnet) [Seleccionar]
CheckFolder.Checked = False

Lo explico con código:
Código (vbnet) [Seleccionar]
If CheckFolder.Checked = True Then
         bla bla bla
     Else ' Else, sólo puede haber una condicion contradictoria en un Boolean, y es "False", "CheckFolder.Checked = False"
         CheckFolder.Checked = False ' Así que esto no hace nada, porque si se procesa esta parte del bloque significa que la propiedad "Checked" ya está en "False".
End If


Saludos








Eleкtro

#2
Un ejemplo:

Código (vbnet) [Seleccionar]
Public Class Form1

   ReadOnly DefaultFolder As String = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Screenshots")

   Public FolderDialog As New FolderBrowserDialog With {.SelectedPath = DefaultFolder}

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown

       MsgBox(FolderDialog.SelectedPath) ' Esta es la ruta que quieres, al iniciar el programa.

       If FolderDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
           MsgBox(FolderDialog.SelectedPath) ' Y esta es después, cuando el usuario la elige.
       End If

       ' Crear snapshot en {FolderDialog.SelectedPath}
       ' Sin variables de por medio.

   End Sub

End Class


Saludos