http://www.developer.com/

Back to article

Windows Secrets for Visual Basic, Part 1


January 21, 2003

Introduction

To call Visual Studio .NET "pretty cool" is getting a little clichéd.

You know it. I know it. We've both created Web applications in minutes, figured out the power behind the .NET Framework, and read how to create a Windows service without needing to plug into the devilish delights of C++.

As the Microsoft advertisement I read this morning quite rightly points out: It'll save you thousands of development hours and position you far in front of your competitors. Unless, of course, your competitors are also using Visual Studio .NET. Which is, in fact, extremely likely.

To stay ahead of the field you need to re-figure out all those nifty little secrets you knew back in Visual Basic 6, getting back to the stage where you knew all those nooks-and-cranny tricks that only time teaches. I'm talking about those nuggets of knowledge that can save you even more time, and metamorphose you from an advanced user straight through to pure .NET expert level. And that's just what I'm going to cover in this intriguing series of twelve articles.

Over the next five months, I'll be writing an article every two weeks, sharing a few of the nuggets I'm compiling into my next book, VB.NET and ASP.NET Secrets. I'll be covering top time-taught tricks for creating Windows, ASP.NET, database, and Web service applications—and a little more, too.

In this first article, we begin our three-part look at Windows applications, exploring a few of the simpler gems that you just might not have tagged onto yet. We'll be looking at:

  • Making your form transparent
  • Figuring out who stole the ToolTips
  • Uncovering how resizing is made easy with VB.NET
  • Discovering how to create split panels, Explorer-style
  • How to save user time by adding auto-complete to combo boxes
  • The power of command-line parameters.

And, don't forget, this is the simple beginning. Over the next eleven articles, you'll find it all gets gloriously exciting.

Ready to begin?

The Secrets!

Making your Form Transparent

You can give your Windows form a great transparent look by altering its Opacity property. Set this anywhere between 0% (completely transparent) and 100% (regular opaque) to see the windows underneath your application.

Who Stole the ToolTips?

If you haven't already noticed, someone stole the ToolTip property in .NET. If you want little popup messages to appear when you hover your mouse over a button or whatever, you'll need to figure out the ToolTip control.

Here's how it works. First, you add an instance of the ToolTip control to your form. This is an invisible component that actually displays the message. You can alter its properties through the Property window, such as whether it is "Active" or the popup delay.

Next, you need to add the actual ToolTip messages. Click on any of your controls and scroll down to the "Misc" section (presuming you order your property list by category). You'll see a property called something like "ToolTip on ToolTip1": This is a fresh property your ToolTip instance gave every control on your form.

Simply set this property to your ToolTip message—and that's a wrap!

Tricks of the Trade: Resizing Made Easy!

When the user resizes your Windows form at runtime, by default all of your controls will stay in place. They will not automatically resize with the form. You can change this behavior by editing the Anchor property of a control.

The Anchor property determines which sides of a form that control will stretch with. After the default, the most common setting for this property is "Top, Bottom, Left, Right"—meaning the control will stretch with all sides of your form, behaving like the majority of resizable Windows applications.

The Dock property of a control is also useful when positioning and resizing controls. It allows you to dock a control to a particular side of a form and stick with that side, regardless of how the form is resized. To set this, simply select a new region via the Dock property drop-down.

Creating Split Panels, Explorer-Style

If you're looking to create the split panel look seen in many modern applications, you'll be happy to learn that a new .NET Splitter control can help you achieve exactly that effect.

Here are the simple steps to recreating the split panel look in your own programs:

  1. Add the control you want to appear down the left of your screen to your form. This could be a TreeView control, if you're going for the Explorer effect, or a Panel control if you want to add numerous controls (such as a list of icons for a menu, Outlook-style).
  2. Set the Dock property of this control to Left.
  3. Add a Splitter control to your form. It should automatically set its Dock property to Left. This is the widget your users will "grab" to resize the panels.
  4. Add your final control to your form. If you're continuing that elusive Explorer look, this will probably be the ListView control.
  5. Set the Dock property of this control to Fill (click the box in the center).

And that's it! You can now try running your application. Your users will be able to "drag" the Splitter and your two controls/panels will automatically resize.


Figure 1: Our Splitter control in action

Save User Time: Add AutoComplete to Combo Boxes

Develop an application in a program such as Microsoft Access and all your combo boxes will incorporate "AutoComplete" by default, that ability to be able to tap a few characters in a drop down and have the nearest matching selection picked out for you.

In Visual Basic however, there's no such intrinsic support. If you want AutoComplete, you've got to do it yourself. And this tip shows you how.

Simply add the following methods to your form. The first is called AutoCompleteKeyUp and accepts a combo box and KeyEventArgs object as arguments. You need to call these in the KeyUp event of your combo box: it looks at what the user has typed and selects the most appropriate match. The second is called AutoCompleteLeave and should be called when the Leave event of your combo box is fired. This one simply takes whatever you've finally chosen and cases it properly, as per the matching selection in the combo box.

Let's look at those functions now:

Public Sub AutoCompleteKeyUp(ByVal Combo 

As ComboBox, _
    ByVal e As KeyEventArgs)
    Dim strTyped As String
    Dim intFoundIndex As Integer
    Dim objFoundItem As Object
    Dim strFoundText As String
    Dim strAppendText As String
    ' Ignore basic selection keys
    Select Case e.KeyCode
        Case Keys.Back, Keys.Left, Keys.Right, Keys.Up, _
            Keys.Delete, Keys.Down, Keys.CapsLock
            Return
    End Select
    ' Find what user has typed in list
    strTyped = Combo.Text
    intFoundIndex = Combo.FindString(strTyped)
    ' If found...
    If intFoundIndex >= 0 Then
        ' Get list item (actual type depends on whether data 

bound)
        objFoundItem = Combo.Items(intFoundIndex)
        ' Use control to resolve text - in case data bound
        strFoundText = Combo.GetItemText(objFoundItem)
        ' Append the typed text to rest of the found string
        ' (text is set twice due to a combo box quirk:
        '  on certain platforms, setting just once ignores casing!)
        strAppendText = strFoundText.Substring(strTyped.Length)
        Combo.Text = strTyped & strAppendText
        Combo.Text = strTyped & strAppendText
        ' Select the appended text
        Combo.SelectionStart = strTyped.Length
        Combo.SelectionLength = strAppendText.Length
    End If
End Sub

Public Sub AutoCompleteLeave(ByVal Combo As ComboBox)
    ' Correct casing when leaving combo
    Dim intFoundIndex As Integer
    intFoundIndex = Combo.FindStringExact(Combo.Text)
    Combo.SelectedIndex = -1
    Combo.SelectedIndex = intFoundIndex
End Sub

And here's how you may call these functions from your combo box:

    Private Sub ComboBox1_KeyUp(ByVal 

sender As Object, _
        ByVal e As 

System.Windows.Forms.KeyEventArgs) _
           Handles ComboBox1.KeyUp
        AutoCompleteKeyUp(ComboBox1, e) 
    End Sub
    Private Sub ComboBox1_Leave(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles ComboBox1.Leave
        AutoCompleteLeave(ComboBox1)
    End Sub

That's all you need to create your own AutoComplete combo boxes. And if you're feeling really adventurous, you might even want to wrap all of this up into a neat little user control. But we'll leave that for another tip...


Figure 2: Our AutoComplete combo box strutting its stuff.

The Power of Command-Line Parameters

Command line parameters can be incredibly useful. They allow users or other applications to pass startup information to your program. For example, if your program was called myapp.exe, they might run the following:

myapp.exe /nodialogs

Here, we have one command line parameter, "/nodialogs". In VB6, we could read this using the Command property. In VB.NET, this has been replaced with the System.Environment.GetCommandLineArgs function, which returns an array of the passed parameters.

And here's a chunk of code to show you just how to read them:

Dim MyStartupArguments()As String, 

intCount As Integer
MyStartupArguments = System.Environment.GetCommandLineArgs

For intCount = 0 To 

UBound(MyStartupArguments)
    MessageBox.Show(MyStartupArguments(intCount).ToString)
Next

Next Time...

Coming up in part two of Windows Secrets, learn how to:

  • Extract HTML from the RichTextBox control
  • Create applications that accept drag-and-drops from Windows Explorer
  • Capture the screen, quick and easy
  • Use the .NET equivalent of PrevInstance.

See you then!

About the Author

Karl Moore is a technology author living in Yorkshire, England. He runs his own consultancy group, White Cliff Computing Ltd, and is author of two best-selling books exposing the secrets behind Visual Basic .NET. When he's not writing for magazines, speaking at conferences, or making embarrassing mistakes on live radio, Karl enjoys a complete lack of a social life. You can visit Karl on the Web at www.karlmoore.com.

# # #

Sitemap | Contact Us

Thanks for your registration, follow us on our social networks to keep up-to-date