|
I am building a web application and would like to get the pathname of a particular folder? How do I do this?
Manav Malhotra
|
|
|
|
|
I am also interested in using this control in a web application. How to do this?
Manav if you find something do please let me also know.
Thanks
Jagadish
I receive every breath i breathe.
|
|
|
|
|
I really like this dll, but was wondering if it was possible to have the buttons as an optional separate control (So that you could hide the buttons and instead use a control to have the buttons in another location, or along the top, etc.). I was also wondering if it was possible to change the images for the buttons. I'm more curious than anything.
Thanks again for a great dll. This is a godsend.
|
|
|
|
|
I don't remember anything being built-in to support this, however the source code is included and is license free, so please feel free to modify it for your needs. Maybe I'll revisit this control someday and bring it up to 2.0 since it still seems to be popular.
-Todd Davis (toddhd@gmail.com)
|
|
|
|
|
I read the discussion by FauthD dated 12:07 18 Oct '05 about the visibility of the TextChanged event. I have the same problem.
I don't completely follow Fauth's explanation of the workaround. I would like access to the event. Any advice?
D.D. "Skip" Snyder
671 Crescent Ct.
Grand Junction, CO 81505
skips@bresnan.net
|
|
|
|
|
I downloaded the source, compiled it, copied the dll to my source, and added a reference to it.
So how do I get it to show up on the toolbox so I can use it?
|
|
|
|
|
Right click on your toolbox in VS
(If you want to, make a new tab)
Choose to add items
Choose Browse
Browse to the dll
OK your way through
The components will now show up in your toolbox
Drag and drop them on the form
-Todd Davis (toddhd@gmail.com)
|
|
|
|
|
|
I've notice that after browse for folder or for file, the current Application directory is changed to the selected folder.
To solve this problem, i've added two lines of code, in the function btnSearch_Click
At the start of the function
string sCurDir = Directory.GetCurrentDirectory ();
And, at the end of the function
Directory.SetCurrentDirectory ( sCurDir );
Regards
|
|
|
|
|
Hi,
in my case I need access to the list box and as a QnDirty solution I made it public.
I think it would be better to expose a more general interface for this, but I am not a basic guy (..,C,CPP,MFC and now a bloddy beginner in C#)
Many regards, Dieter
|
|
|
|
|
Hi,
I needed an event that fires after all items have been added. So I created the event ItemsAdded and called RaiseEvent for it after all loops containing the event ItemAdded,
The code is to much to post here (few places), but you get the idea.
@Todd: send me a p-mail, then I can mail you the files..
I also added the "preloading current path/file" extention I did for the BrowseField.
Thanks for this class, Dieter
|
|
|
|
|
Hi,
in single slection mode you will get an exception (out of range). The reason is that the SelectedItem is invalid in the second time of the loop. (the count does not get decremented)
I added an exit in case it is single selection mode.
Warning: I had no time to check the other selection modes.
Private Sub PictureDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureDelete.Click
While ListBox1.SelectedItems.Count > 0
ListBox1.Items.Remove(ListBox1.SelectedItem)
RaiseEvent ItemRemoved(Me, e)
If (ListBox1.SelectionMode = SelectionMode.One) Then
Exit While
End If
End While
End Sub
Good luck, Dieter
|
|
|
|
|
Hi,
the event does not show up in the event list of the form.
it has something to do with the name of the event.
Renaming to xTextChanged for example does work.
As a workaround I build this event in. it is even better for my app:
Public Event TextValid(ByVal sender As Object, ByVal e As EventArgs)
in Textbox1_TextChanged:
If TextIsValid(Text) Then
RaiseEvent TextValid(Me, New EventArgs)
End If
and the whole sub:
Private Sub Textbox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If _BrowseType = BrowseTypes.File And _FilenameOnly And Text.IndexOf("\") > -1 Then Text = Text.Substring(Text.LastIndexOf("\") + 1)
RaiseEvent TextChanged(sender, e)
If TextIsValid(Text) Then
RaiseEvent TextValid(Me, New EventArgs)
End If
End Sub
Thanks for this class! Dieter
|
|
|
|
|
Hi,
all my programs must be user friendly. One part of that is that paths and filenames must be stored in registry and be shown the next time. For that I use the iProfile class from Alvaro Mendez (http://www.codeproject.com/csharp/ReadWriteXmlIni.asp).
A small change is required to to the BrowseField to expose the stored values to the user:
I just added two lines (one for files, one for folders) before the control actually gets opened:
OpenFileDialog1.FileName = TextBox1.Text
FolderBrowserDialog1.SelectedPath = TextBox1.Text
Not sure if that will show nice in the forum:
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
If _BrowseType = BrowseTypes.File Then
OpenFileDialog1.FileName = TextBox1.Text
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
TextBox1.Text = OpenFileDialog1.FileName
End If
Else
FolderBrowserDialog1.SelectedPath = TextBox1.Text
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
TextBox1.Text = FolderBrowserDialog1.SelectedPath
End If
End If
End Sub
Thanks for this class! Dieter
|
|
|
|
|
Thanks for the incredibly useful dll's!
|
|
|
|
|
Nice control.
The icon only shows up if you add it to your toolbox from the DLL. It will not show up in the My User Controls section.
Here is the code with the "Caption" fix, tooltip, and file validation. Add a tooltip (Tooltip1) to the form, then you can copy the code.
Imports System.ComponentModel
Public Class BrowseField
Inherits System.Windows.Forms.UserControl
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'UserControl1 overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents PanelTop As System.Windows.Forms.Panel
Friend WithEvents PanelBottom As System.Windows.Forms.Panel
Friend WithEvents PanelIndent As System.Windows.Forms.Panel
Friend WithEvents PanelPicture As System.Windows.Forms.Panel
Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
Friend WithEvents FolderBrowserDialog1 As System.Windows.Forms.FolderBrowserDialog
Friend WithEvents LabelTop As System.Windows.Forms.Label
Friend WithEvents LabelLeft As System.Windows.Forms.Label
Friend WithEvents ToolTip1 As System.Windows.Forms.ToolTip
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(BrowseField))
Me.PanelTop = New System.Windows.Forms.Panel
Me.LabelTop = New System.Windows.Forms.Label
Me.PanelBottom = New System.Windows.Forms.Panel
Me.PanelPicture = New System.Windows.Forms.Panel
Me.PictureBox1 = New System.Windows.Forms.PictureBox
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.PanelIndent = New System.Windows.Forms.Panel
Me.LabelLeft = New System.Windows.Forms.Label
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog
Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog
Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)
Me.PanelTop.SuspendLayout()
Me.PanelBottom.SuspendLayout()
Me.PanelPicture.SuspendLayout()
Me.PanelIndent.SuspendLayout()
Me.SuspendLayout()
'
'PanelTop
'
Me.PanelTop.Controls.Add(Me.LabelTop)
Me.PanelTop.Dock = System.Windows.Forms.DockStyle.Top
Me.PanelTop.Location = New System.Drawing.Point(0, 0)
Me.PanelTop.Name = "PanelTop"
Me.PanelTop.Size = New System.Drawing.Size(288, 20)
Me.PanelTop.TabIndex = 0
'
'LabelTop
'
Me.LabelTop.AutoSize = True
Me.LabelTop.Location = New System.Drawing.Point(0, 2)
Me.LabelTop.Name = "LabelTop"
Me.LabelTop.Size = New System.Drawing.Size(0, 16)
Me.LabelTop.TabIndex = 1
'
'PanelBottom
'
Me.PanelBottom.Controls.Add(Me.PanelPicture)
Me.PanelBottom.Controls.Add(Me.TextBox1)
Me.PanelBottom.Controls.Add(Me.PanelIndent)
Me.PanelBottom.Dock = System.Windows.Forms.DockStyle.Fill
Me.PanelBottom.Location = New System.Drawing.Point(0, 20)
Me.PanelBottom.Name = "PanelBottom"
Me.PanelBottom.Size = New System.Drawing.Size(288, 20)
Me.PanelBottom.TabIndex = 1
'
'PanelPicture
'
Me.PanelPicture.Controls.Add(Me.PictureBox1)
Me.PanelPicture.Dock = System.Windows.Forms.DockStyle.Right
Me.PanelPicture.Location = New System.Drawing.Point(264, 0)
Me.PanelPicture.Name = "PanelPicture"
Me.PanelPicture.Size = New System.Drawing.Size(24, 20)
Me.PanelPicture.TabIndex = 1
'
'PictureBox1
'
Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image)
Me.PictureBox1.Location = New System.Drawing.Point(3, 3)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(16, 16)
Me.PictureBox1.TabIndex = 0
Me.PictureBox1.TabStop = False
Me.ToolTip1.SetToolTip(Me.PictureBox1, "Browse")
'
'TextBox1
'
Me.TextBox1.AllowDrop = True
Me.TextBox1.Dock = System.Windows.Forms.DockStyle.Fill
Me.TextBox1.Location = New System.Drawing.Point(0, 0)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(288, 20)
Me.TextBox1.TabIndex = 2
Me.TextBox1.Text = ""
'
'PanelIndent
'
Me.PanelIndent.Controls.Add(Me.LabelLeft)
Me.PanelIndent.Dock = System.Windows.Forms.DockStyle.Left
Me.PanelIndent.Location = New System.Drawing.Point(0, 0)
Me.PanelIndent.Name = "PanelIndent"
Me.PanelIndent.Size = New System.Drawing.Size(0, 20)
Me.PanelIndent.TabIndex = 0
'
'LabelLeft
'
Me.LabelLeft.AutoSize = True
Me.LabelLeft.Location = New System.Drawing.Point(0, 3)
Me.LabelLeft.Name = "LabelLeft"
Me.LabelLeft.Size = New System.Drawing.Size(0, 16)
Me.LabelLeft.TabIndex = 2
Me.LabelLeft.Visible = False
'
'BrowseField
'
Me.Controls.Add(Me.PanelBottom)
Me.Controls.Add(Me.PanelTop)
Me.Name = "BrowseField"
Me.Size = New System.Drawing.Size(288, 40)
Me.PanelTop.ResumeLayout(False)
Me.PanelBottom.ResumeLayout(False)
Me.PanelPicture.ResumeLayout(False)
Me.PanelIndent.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
#Region " Variable Declarations"
Public Enum CaptionStyles
Top
Left
OutDent
End Enum
Enum BrowseTypes
File
Folder
End Enum
Public Enum ValidationModes
None
OnLoseFocus
End Enum
Private _validationMode As ValidationModes = ValidationModes.None
Private _captionStyle As CaptionStyles = CaptionStyles.Top
Private _outdent As Integer = 20
Private _BrowseType As BrowseTypes = BrowseTypes.Folder
Private _FilenameOnly As Boolean = False
#End Region
#Region "Events"
'Declare the DrawingModeChanged Event
Public Shadows Event TextChanged(ByVal sender As Object, ByVal ev As EventArgs)
Public Event TextInvalid(ByVal sender As Object, ByVal e As EventArgs)
#End Region
#Region " Custom Properties"
<Category("Behavior"), DefaultValue(""), Description("Sets the initial directory for the file or folder browser dialog")> _
Public Property InitialDirectoy() As String
Get
Return OpenFileDialog1.InitialDirectory
End Get
Set(ByVal Value As String)
OpenFileDialog1.InitialDirectory = Value
FolderBrowserDialog1.SelectedPath = Value
End Set
End Property
<Category("Appearance"), DefaultValue(CaptionStyles.Top), Description("Describes where the caption label is positioned relative to the textbox")> _
Public Property CaptionStyle() As CaptionStyles
Get
Return _captionStyle
End Get
Set(ByVal Value As CaptionStyles)
_captionStyle = Value
Redraw()
End Set
End Property
<Category("Appearance"), DefaultValue(""), Description("The text value of the caption label")> _
Public Property Caption() As String
Get
Return LabelTop.Text
End Get
Set(ByVal Value As String)
LabelTop.Text = Value
LabelLeft.Text = Value
Redraw()
End Set
End Property
<Category("Appearance"), DefaultValue(20), Description("The amount of space the label is outdented from the textbox, for Wizard 97 applications.")> _
Public Property OutDent() As Integer
Get
Return _outdent
End Get
Set(ByVal Value As Integer)
_outdent = Value
Redraw()
End Set
End Property
<Category("Behavior"), DefaultValue(ValidationModes.None), Description("When to validate the text and raise the InvalidText event.")> _
Public Property ValidationMode() As ValidationModes
Get
Return _validationMode
End Get
Set(ByVal Value As ValidationModes)
_validationMode = Value
End Set
End Property
<Category("Behavior"), DefaultValue(BrowseTypes.File), Description("Specifies the type of search to be done, file or folder.")> _
Public Property BrowseType() As BrowseTypes
Get
Return _BrowseType
End Get
Set(ByVal Value As BrowseTypes)
_BrowseType = Value
End Set
End Property
<Category("Appearance"), DefaultValue(""), Description("If a path to a file is selected, this returns only the file name.")> _
Public ReadOnly Property FileName() As String
Get
If _BrowseType = BrowseTypes.File And Text.IndexOf("\") > -1 Then
Return Text.Substring(Text.LastIndexOf("\") + 1)
Else
Return ""
End If
End Get
End Property
<Category("Behavior"), DefaultValue(False), Description("If set to true and in file mode, the text will reflect only the selected filename.")> _
Public Property FilenameOnly() As Boolean
Get
Return _FilenameOnly
End Get
Set(ByVal Value As Boolean)
_FilenameOnly = Value
End Set
End Property
#End Region
#Region "Custom Procedures"
''' -----------------------------------------------------------------------------
''' <summary>
''' Validates that the text entered is of the correct BrowseType (file or folder)
''' and exists on the drive.
''' </summary>
''' <param name="FileNameOnlyPath">Path to use if in FileNameOnlyMode. Include a trailing "\" or "/".</param>
''' <returns>True if valid, otherwise false.</returns>
''' <remarks>
''' </remarks>
''' <history>
''' [robertf] 3/4/2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Function TextIsValid(ByVal FileNameOnlyPath As String) As Boolean
Select Case Me.BrowseType
Case BrowseTypes.File
FileNameOnlyPath &= Me.Text
Return System.IO.File.Exists(FileNameOnlyPath)
Case BrowseTypes.Folder
Return System.IO.Directory.Exists(Me.Text)
End Select
End Function
''' -----------------------------------------------------------------------------
''' <summary>
''' Validates that the text entered is of the correct BrowseType (file or folder)
''' and exists on the drive.
''' </summary>
''' <returns>True if valid, otherwise false.</returns>
''' <remarks>
''' </remarks>
''' <history>
''' [robertf] 3/4/2005 Created
''' </history>
''' -----------------------------------------------------------------------------
'''
Public Function TextIsValid() As Boolean
Return TextIsValid("")
End Function
#End Region
#Region " Exposed Child Control Properties"
<Category("Behavior"), DefaultValue(System.Windows.Forms.CharacterCasing.Normal), Description("Indicates if all characters should be left alone or converted to uppercase or lowercase.")> _
Public Property CharacterCasing() As System.Windows.Forms.CharacterCasing
Get
Return TextBox1.CharacterCasing
End Get
Set(ByVal Value As System.Windows.Forms.CharacterCasing)
TextBox1.CharacterCasing = Value
End Set
End Property
<Browsable(False), Category("Appearance"), Description("The length of the currently selected text.")> _
Public Property SelectionLength() As System.Int32
Get
Return TextBox1.SelectionLength
End Get
Set(ByVal Value As System.Int32)
TextBox1.SelectionLength = Value
End Set
End Property
<Category("Behavior"), DefaultValue(True), Description("Determines if the text can be edited by hand.")> _
Public Property EditEnabled() As System.Boolean
Get
Return TextBox1.Enabled
End Get
Set(ByVal Value As System.Boolean)
TextBox1.Enabled = Value
End Set
End Property
<Category("Behavior"), DefaultValue(""), Description("Indicates the character to display for password input for single-line edit controls.")> _
Public Property PasswordChar() As System.Char
Get
Return TextBox1.PasswordChar
End Get
Set(ByVal Value As System.Char)
TextBox1.PasswordChar = Value
End Set
End Property
<Category("Appearance"), DefaultValue(System.Windows.Forms.ScrollBars.None), Description("Indicates, for multi-line edit controls, which scroll bars will be shown for this control.")> _
Public Property ScrollBars() As System.Windows.Forms.ScrollBars
Get
Return TextBox1.ScrollBars
End Get
Set(ByVal Value As System.Windows.Forms.ScrollBars)
TextBox1.ScrollBars = Value
End Set
End Property
<Category("Appearance"), DefaultValue(""), Browsable(True), Description("The text value of the control.")> _
Public Shadows Property Text() As System.String
Get
Return TextBox1.Text
End Get
Set(ByVal Value As System.String)
TextBox1.Text = Value
End Set
End Property
<Category("Appearance"), DefaultValue(System.Windows.Forms.HorizontalAlignment.Left), Description("Indicates how the text should be aligned for edit controls.")> _
Public Property TextAlign() As System.Windows.Forms.HorizontalAlignment
Get
Return TextBox1.TextAlign
End Get
Set(ByVal Value As System.Windows.Forms.HorizontalAlignment)
TextBox1.TextAlign = Value
End Set
End Property
<Category("Appearance"), Description("The background color used to display text and graphics in the control.")> _
Public Property TextBackColor() As System.Drawing.Color
Get
Return TextBox1.BackColor
End Get
Set(ByVal Value As System.Drawing.Color)
TextBox1.BackColor = Value
End Set
End Property
<Category("Appearance"), DefaultValue(System.Windows.Forms.BorderStyle.Fixed3D), Description("Indicates whether or not the edit control should have a border.")> _
Public Property BorderStyle() As System.Windows.Forms.BorderStyle
Get
Return TextBox1.BorderStyle
End Get
Set(ByVal Value As System.Windows.Forms.BorderStyle)
TextBox1.BorderStyle = Value
End Set
End Property
<Browsable(False), DefaultValue(True), Category("Behavior"), Description("Indicates if the edit control can undo the previous action.")> _
Public ReadOnly Property CanUndo() As System.Boolean
Get
Return TextBox1.CanUndo
End Get
End Property
<Category("Appearance"), DefaultValue(System.Drawing.KnownColor.WindowText), Description("The foreground color used to display text in the control.")> _
Public Property TextForeColor() As System.Drawing.Color
Get
Return TextBox1.ForeColor
End Get
Set(ByVal Value As System.Drawing.Color)
TextBox1.ForeColor = Value
End Set
End Property
<Category("Appearance"), DefaultValue(System.Drawing.KnownColor.WindowText), Description("The foreground color used to display the caption.")> _
Public Property CaptionForeColor() As System.Drawing.Color
Get
Return LabelTop.ForeColor
End Get
Set(ByVal Value As System.Drawing.Color)
LabelTop.ForeColor = Value
LabelLeft.ForeColor = Value
End Set
End Property
<Category("Behavior"), Description("Indicates that the selection should be hidden when the edit control loses focus.")> _
Public Property HideSelection() As System.Boolean
Get
Return TextBox1.HideSelection
End Get
Set(ByVal Value As System.Boolean)
TextBox1.HideSelection = Value
End Set
End Property
<Category("Behavior"), DefaultValue(32767), Description("Specifies the maximum number of characters that can be entered into the edit control.")> _
Public Property MaxLength() As System.Int32
Get
Return TextBox1.MaxLength
End Get
Set(ByVal Value As System.Int32)
TextBox1.MaxLength = Value
End Set
End Property
<Category("Appearance"), DefaultValue(""), Description("Tooltip caption for the textbox.")> _
Public Property Tooltip() As String
Get
Return Me.ToolTip1.GetToolTip(Me.TextBox1)
End Get
Set(ByVal Value As String)
Me.ToolTip1.SetToolTip(Me.TextBox1, Value)
End Set
End Property
<Category("Appearance"), DefaultValue("Browse"), Description("Tooltip caption for the folder icon.")> _
Public Property BrowseIconTooltip() As String
Get
Return Me.ToolTip1.GetToolTip(Me.PictureBox1)
End Get
Set(ByVal Value As String)
Me.ToolTip1.SetToolTip(Me.PictureBox1, Value)
End Set
End Property
<Browsable(False), DefaultValue(False), Category("Behavior"), Description("Indicates if the text in the edit control has been modified by the user.")> _
Public Property Modified() As System.Boolean
Get
Return TextBox1.Modified
End Get
Set(ByVal Value As System.Boolean)
TextBox1.Modified = Value
End Set
End Property
<Category("Behavior"), Description("Controls whether the text in the edit control can be changed or not.")> _
Public Property [ReadOnly]() As System.Boolean
Get
Return TextBox1.ReadOnly
End Get
Set(ByVal Value As System.Boolean)
TextBox1.ReadOnly = Value
End Set
End Property
<Browsable(False), DefaultValue(""), Category("Appearance"), Description("The currently selected text.")> _
Public Property SelectedText() As System.String
Get
If Not TextBox1.SelectedText Is Nothing Then Return TextBox1.SelectedText
End Get
Set(ByVal Value As System.String)
If Not Value Is Nothing Then TextBox1.SelectedText = Value
End Set
End Property
<Browsable(False), DefaultValue(0), Category("Appearance"), Description("The beginning of the currently selected text.")> _
Public Property SelectionStart() As System.Int32
Get
Return TextBox1.SelectionStart
End Get
Set(ByVal Value As System.Int32)
TextBox1.SelectionStart = Value
End Set
End Property
<Browsable(False), DefaultValue(0), Description("The number of characters contained in the text of the control.")> _
Public ReadOnly Property TextLength() As System.Int32
Get
Return TextBox1.TextLength
End Get
End Property
<Browsable(False), DefaultValue(True), Category("Focus"), Description("Checks if this control can receive the focus.")> _
Public Shadows ReadOnly Property CanFocus() As System.Boolean
Get
Return TextBox1.CanFocus
End Get
End Property
<Browsable(False), DefaultValue(True), Category("Focus"), Description("Checks if this control can be selected.")> _
Public Shadows ReadOnly Property CanSelect() As System.Boolean
Get
Return TextBox1.CanSelect
End Get
End Property
<Browsable(False), DefaultValue(False), Category("Focus"), Description("Determines if this control is currently capturing all mouse input.")> _
Public Shadows Property Capture() As System.Boolean
Get
Return TextBox1.Capture
End Get
Set(ByVal Value As System.Boolean)
TextBox1.Capture = Value
End Set
End Property
<Browsable(False), DefaultValue(False), Description("Determines if this control or one if its children currently has the focus.")> _
Public Shadows ReadOnly Property ContainsFocus() As System.Boolean
Get
Return TextBox1.ContainsFocus
End Get
End Property
<Category("Behavior"), Description("The shortcut menu to display when the user right-clicks the control.")> _
Public Shadows Property ContextMenu() As System.Windows.Forms.ContextMenu
Get
Return TextBox1.ContextMenu
End Get
Set(ByVal Value As System.Windows.Forms.ContextMenu)
TextBox1.ContextMenu = Value
End Set
End Property
<Browsable(False), DefaultValue(False), Description("Determines if this control has focus.")> _
Public Shadows ReadOnly Property Focused() As System.Boolean
Get
Return TextBox1.Focused
End Get
End Property
<Category("Appearance"), Description("The font used to display text in the control.")> _
Public Property TextFont() As System.Drawing.Font
Get
Return TextBox1.Font
End Get
Set(ByVal Value As System.Drawing.Font)
TextBox1.Font = Value
End Set
End Property
<Category("Appearance"), Description("The font used to display the caption in the control.")> _
Public Property CaptionFont() As System.Drawing.Font
Get
Return LabelTop.Font
End Get
Set(ByVal Value As System.Drawing.Font)
LabelTop.Font = Value
LabelLeft.Font = Value
End Set
End Property
<Category("Appearance"), DefaultValue(""), Description("The title to display in the file dialog.")> _
Public Property FileDialogTitle() As System.String
Get
Return OpenFileDialog1.Title
End Get
Set(ByVal Value As String)
OpenFileDialog1.Title = Value
End Set
End Property
<Category("Appearance"), DefaultValue(""), Description("The file filter for the file dialog.")> _
Public Property FileDialogFilter() As System.String
Get
Return OpenFileDialog1.Filter
End Get
Set(ByVal Value As String)
OpenFileDialog1.Filter = Value
End Set
End Property
<Category("Appearance"), DefaultValue(1), Description("The filter index of the filter to use in the file dialog.")> _
Public Property FileDialogFilterIndex() As System.Int32
Get
Return OpenFileDialog1.FilterIndex
End Get
Set(ByVal Value As Integer)
OpenFileDialog1.FilterIndex = Value
End Set
End Property
<Category("Appearance"), DefaultValue(""), Description("The description displayed above the tree in the folder dialog box.")> _
Public Property FolderDialogDescription() As String
Get
Return FolderBrowserDialog1.Description
End Get
Set(ByVal Value As String)
FolderBrowserDialog1.Description = Value
End Set
End Property
#End Region
#Region " Rendering Functions"
Private Sub Redraw()
Select Case _captionStyle
Case CaptionStyles.Top
DrawTopStyle()
Case CaptionStyles.Left
DrawLeftStyle()
Case CaptionStyles.OutDent
DrawOutDentStyle()
End Select
End Sub
Private Sub DrawTopStyle()
LabelLeft.Visible = False
PanelIndent.Width = 0
LabelTop.Visible = True
PanelTop.Height = LabelTop.Height
End Sub
Private Sub DrawOutDentStyle()
LabelLeft.Visible = False
PanelIndent.Width = _outdent
LabelTop.Visible = True
PanelTop.Height = LabelTop.Height
End Sub
Private Sub DrawLeftStyle()
LabelTop.Visible = False
PanelTop.Height = 0
LabelLeft.Visible = True
PanelIndent.Width = LabelLeft.Width
End Sub
#End Region
#Region " Handled Events "
Private Sub BrowseField_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
If _captionStyle = CaptionStyles.Left Then
If Me.Width < LabelLeft.Width + PictureBox1.Width Then Me.Width = LabelLeft.Width + PictureBox1.Width
If Me.Height <> TextBox1.Height + 4 Then Me.Height = TextBox1.Height + 4
Else
If Me.Width < LabelTop.Width + PictureBox1.Width Then Me.Width = LabelTop.Width + PictureBox1.Width
If Me.Height <> LabelTop.Height + TextBox1.Height + 4 Then Me.Height = LabelTop.Height + TextBox1.Height + 4
End If
End Sub
Private Sub Textbox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If _BrowseType = BrowseTypes.File And _FilenameOnly And Text.IndexOf("\") > -1 Then Text = Text.Substring(Text.LastIndexOf("\") + 1)
RaiseEvent TextChanged(sender, e)
End Sub
Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
Else
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
Dim files As String() = CType(e.Data.GetData("FileDrop", False), String())
Dim s As String
For Each s In files
Text = s
Next
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
If _BrowseType = BrowseTypes.File Then
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
TextBox1.Text = OpenFileDialog1.FileName
End If
Else
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
TextBox1.Text = FolderBrowserDialog1.SelectedPath
End If
End If
End Sub
Private Sub BrowseField_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Leave
If Me.ValidationMode = ValidationModes.OnLoseFocus AndAlso Not Me.TextIsValid Then
RaiseEvent TextInvalid(Me, New EventArgs)
End If
End Sub
#End Region
End Class
Robert R Freeman
|
|
|
|
|
One correction: the enum OnLoseFocus should be OnLeave.
|
|
|
|
|
Lookup "ToolboxBitmapAttribute [^]" in the MSDN Library Documentation.
Change your class declarations as follows:
From
<br />
Public Class BrowseField<br /> to
<br />
<ToolboxBitmap(GetType(BrowseField), "BrowseField.bmp")> Public Class BrowseField<br />
and From
<br />
Public Class BrowseList<br /> to
<br />
<ToolboxBitmap(GetType(BrowseList), "BrowseList.bmp")> Public Class BrowseList
The icons will still not appear in the "My User Controls" Tab of the Toolbox, but when you add them manually to any other project (via the "Add/Remove Items ..." context menu item) you will see them.
Hope this helps.
|
|
|
|
|
Thanks for this suggestion, and the one on resizing. I will try them both, and if they work, I will upload those changes (and credit you in the code of course). Thanks so much!
I hope the controls were helpful to you.
-Todd Davis (toddhd@gmail.com)
|
|
|
|
|
Perhaps you should just not set the width of the controls 'by hand' when AnchorStyles.Right is set?
Suggestion: Insert the following lines at the beginning of BrowseField_Resize resp. BrowseList_Resize .
<br />
If (Me.Anchor And (AnchorStyles.Right Or AnchorStyles.Left)) = (AnchorStyles.Right Or AnchorStyles.Left) Then<br />
Exit Sub<br />
End If<br />
Hope this helps.
Cool piece of work anyway. (Got my 5)
|
|
|
|
|
First of all I love the control it has helped me alot.
I am having some problems with changing the properties of ListBox, I had to change the selection mode in the initialization code because it was not applying the value set in the properties list.
Also I am trying to change the ListBox to an OwnerDrawFixed mode, so I can colorize the strings, but that event is not firing.
Great job just a few quirks left.
|
|
|
|
|
Thanks, glad it is helping you out, at least somewhat.
I had the same problem with the properties, if I tried to set them through the designer. Even if they "took" once, they would dissapear after making some other change in VS.NET. I think this is a problem with VS, but either way, it's a pain.
I started work a newer version of these controls that had more features, but the biggest feature is that all the properties are being properly overridden, so you won't have to do this:
BrowseField1.TextBox.BorderStyle = BorderStyle.FixedSingle;
Instead, it will look more like this:
BrowseField1.BorderStyle = BorderStyle.FixedSingle;
I don't know when this be available. I started working on it a few months back, and then my "day job" got real busy, so I haven't put much time into it. When it is done however, it will be updated right here in CodeProject.
-Todd Davis (toddhd@gmail.com)
|
|
|
|
|
Any idea how i can get the ownerdraw working for the list box?
I thought it would be a simple line like this but apparently not:
this.CompareToList.ListBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(ListBoxDrawItem);
Thanks again.
|
|
|
|
|
Acually nevermind my response, I dont know why I didnt try this before, I just programatically set the draw mode and it works fine.
Fantastic work. Keep it up.
|
|
|
|
|
First of all control is great. I do get exception: DragDrop registration failed. What I do is:
- Create a new windows form MyForm
- Drop BrowseField from my toolbox on the form
- Write this code to use the form:
MyForm mf= new MyForm();
DialogResult dr = mf.ShowDialog();
At ShowDialog I get exception: DragDrop registration failed
What should I do to use it2
By the way I work on WinXp SP2 and .NET 1.1 Sp1.
Thanks.
DK
|
|
|
|
|