RootFolder = "C:\"

Status
Niet open voor verdere reacties.

famlam

Gebruiker
Lid geworden
15 okt 2008
Berichten
416
Hoe kun je in een FolderBrowserDialog als RootFolder een andere map dan de Environment.SpecialFolder.X mappen kiezen? Want als ik daar 'RootFolder = "C:\" invul dan krijg ik een runtime-error dat 'c:\' niet naar integer geconverteerd kan worden...

System.InvalidCastException was unhandled
Message="De conversie van tekenreeks C:\ naar type Integer is ongeldig."
Source="Microsoft.VisualBasic"
StackTrace:
bij Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
bij TestProg.LogInstellingen.Button1_Click(Object sender, EventArgs e) in C:\Users\XXX\Documents\Visual Studio 2008\Projects\ TestProg\ TestProg\LogInstellingen.vb:regel 15
bij System.Windows.Forms.Control.OnClick(EventArgs e)
bij System.Windows.Forms.Button.OnClick(EventArgs e)
bij System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bij System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bij System.Windows.Forms.Control.WndProc(Message& m)
bij System.Windows.Forms.ButtonBase.WndProc(Message& m)
bij System.Windows.Forms.Button.WndProc(Message& m)
bij System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bij System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bij System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bij System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bij System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bij System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bij System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bij System.Windows.Forms.Application.Run(ApplicationContext context)
bij Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bij Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bij Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
bij VrijeSchijfruimte.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:regel 81
bij System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bij System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bij Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bij System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bij System.Threading.ThreadHelper.ThreadStart()
InnerException: System.FormatException
Message="De indeling van de invoertekenreeks is onjuist."
Source="Microsoft.VisualBasic"
StackTrace:
bij Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
bij Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
InnerException:
 
Kun je je code erbij zetten? blijkbaar verwacht dat ding een integer in plaats van een string...
 
Dat hoeft niet omdat de rootfolder een enumeration verwacht, De manier om dat op te lossen, is om rootfolder = environment.specialfolder.mycomputer
en selectedfolder = "c:\" te gebruiken.

Een andere manier is om misschien een eigen enumeration te maken en te gebruiken voor de rootfolder.
 
Dat hoeft niet omdat de rootfolder een enumeration verwacht, De manier om dat op te lossen, is om rootfolder = environment.specialfolder.mycomputer
en selectedfolder = "c:\" te gebruiken.

Een andere manier is om misschien een eigen enumeration te maken en te gebruiken voor de rootfolder.

Waaruit blijkt dat RootFolder=0 ???
 
Dat hoeft niet omdat de rootfolder een enumeration verwacht, De manier om dat op te lossen, is om rootfolder = environment.specialfolder.mycomputer
en selectedfolder = "c:\" te gebruiken.

Een andere manier is om misschien een eigen enumeration te maken en te gebruiken voor de rootfolder.

Is het ook mogelijk om "C:\" toe te voegen aan de bestaande enumeration?
 
Is het ook mogelijk om "C:\" toe te voegen aan de bestaande enumeration?

Ik denk het niet, immers c:= een logische schijf met daarop een aantal "Rootfolders".

Gezien vanuit de FolderNameEditor Class, waarin de enumeratie wordt bepaald, hoeft een RootFolder niet eens gelijk na de "C:\" te komen.
Als voorbeeld kan je denken aan je DesktopFolder, dat is niet "C:\Bureablad, maar "C:\Documents and Settings\username\Bureablad" snap je?

Ik vond op het net een mooi stukje code wat één en ander misschien nog duidelijker maakt.
Start maar eens een nieuw project en kwak een listbox op je venster die je "lbx" moet noemen ivm de gebruikte code :

Grtz, djenn.


Code:
Imports System.Windows.Forms.Design

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim os As OperatingSystem = Environment.OSVersion
        Dim OSid As PlatformID = os.Platform
        Dim drives() As String = Environment.GetLogicalDrives()
        Dim drivesString As String = ""
        Dim drive As String
        For Each drive In drives
            drivesString += drive + ", "
        Next
        drivesString = drivesString.TrimEnd(" "c, ","c)
        lbx.Items.Add("Machine Name:            " + Environment.MachineName)
        lbx.Items.Add("Operating System:        " + Environment.OSVersion.ToString())
        lbx.Items.Add("Operating System ID:     " + OSid.ToString())
        lbx.Items.Add("Current Folder:          " + Environment.CurrentDirectory)
        lbx.Items.Add("CLR Version:             " + Environment.Version.ToString())
        lbx.Items.Add("Present Drives:          " + drivesString)
        lbx.Items.Add("Program Files:           " + _
            Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles))
        lbx.Items.Add("Common Program Files:    " + _
            Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles))
        lbx.Items.Add("Windows Desktop:         " + _
            Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
        lbx.Items.Add("Favorites:               " + _
            Environment.GetFolderPath(Environment.SpecialFolder.Favorites))
        lbx.Items.Add("History:                 " + _
            Environment.GetFolderPath(Environment.SpecialFolder.History))
        lbx.Items.Add("Personal (My Documents:  " + _
            Environment.GetFolderPath(Environment.SpecialFolder.Personal))
        lbx.Items.Add("Start Menu's Program:    " + _
            Environment.GetFolderPath(Environment.SpecialFolder.Programs))
        lbx.Items.Add("Recent:                  " + _
            Environment.GetFolderPath(Environment.SpecialFolder.Recent))
        lbx.Items.Add("Send To:                 " + _
        Environment.GetFolderPath(Environment.SpecialFolder.SendTo))
        lbx.Items.Add("Start Menu:              " + _
            Environment.GetFolderPath(Environment.SpecialFolder.StartMenu))
        lbx.Items.Add("Startup:                 " + _
            Environment.GetFolderPath(Environment.SpecialFolder.Startup))
        lbx.Items.Add("Windows System:          " + _
            Environment.GetFolderPath(Environment.SpecialFolder.System))
        lbx.Items.Add("Application Data:        " + _
            Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
        lbx.Items.Add("Common Application:      " + _
            Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData))
        lbx.Items.Add("Local Application Data:  " + _
                Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
        lbx.Items.Add("Cookies:                 " + _
            Environment.GetFolderPath(Environment.SpecialFolder.Cookies))
    End Sub
End Class
 
zou wel moeten kunnen , maar dat is een gebied waar ik niets van weet,

het is iets met System.Reflection en System.Runtime.InteropServices volgens mij.

dan 'Dim Builder as _Enumbuilder ...'

maar hou me er niet aan vast.
 
Ik denk het niet, immers c:= een logische schijf met daarop een aantal "Rootfolders".

Gezien vanuit de FolderNameEditor Class, waarin de enumeratie wordt bepaald, hoeft een RootFolder niet eens gelijk na de "C:\" te komen.
Als voorbeeld kan je denken aan je DesktopFolder, dat is niet "C:\Bureablad, maar "C:\Documents and Settings\username\Bureablad" snap je?

Als je bedoelt met 'logische schijf met daarop een aantal rootfolders' dat de schijf 'C:\' ook niet kan bestaan op sommige computers (en dan moet ik je gelijk geven, maar ) dat valt eventueel op te lossen door
Dim nieuw_enumeratie_onderdeel As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal.Substring(0, 3))
Dan kiest hij dus automatisch de 'hoofdschijf' van de computer.

Het 'enige' probleem is dat ik absoluut niet weet hoe ik een onderdeel aan de enumeratie kan toevoegen.

Code:
Imports System
Imports System.Reflection 'Deze klopte inderdaad Pizara!
Imports System.Reflection.Emit
Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Dim EnumMaker As EnumBuilder
      'En dan weet ik het niet meer... hoe te koppelen aan EnumMaker en hoe te bewerken...
   End Sub
End Class
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan