Wednesday, February 1, 2012

vb.net bring form to the front

Stupid Question? How to bring an already running application in front?
This is really simple but if you get off track it can be far more complicated than it needs to be. See what people run into below.

Focus On Another Application

set the focus - VB.NET

Form.BringToFront
 
I was programing in Visual Studio 2010. I ran into this problem and saw no answers in any Google searches. I saw a whole lot of very complicated and even crazy work arounds so I'm posting this to possibly help someone else who runs into a similar issue.
 
The problem was when I tried to get focus on the new form after it opened it would always stay in the background. This subroutine simply checks to see if a window is open with a flag I set and if it is I focus on it. When the program closes it sets the flag back to 0. I could not get the window to focus when I used
 
Dim frm as New vtfrmsearch
 
by removing the Dim statement everything worked perfect.
 

Private Sub SearchTempToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchTempToolStripMenuItem.Click

     If SearchOpen = 1 Then
        vtfrmsearch.Focus()


     End If


    If SearchOpen = 0 Then
        vtfrmsearch.Show()
        SearchOpen = 1
    End If

End 


If you want a form to always stay on top until it is closed use:

vtfrmsearch.ShowDialog()


Sub

Read, Add, Update, Modify, or Delete lines from XML app.config file VB.NET

I setup my program with a custom app.config file. The file is used store most application user settings.
I use this code to read, update, add, and delete lines as needed.

My application app.config file
*******************

Imports System.Configuration
Imports System.Xml
Imports System.Xml.Linq
Imports System.Xml.Linq.Extensions



''' <summary>
''' AppConfigFileSettings: This class is used to Change the
''' AppConfigs Parameters at runtime through User Interface
''' </summary>
''' <remarks></remarks>


Public Class AppConfigFileSettings

    Public Shared Sub addmenuitem(ByVal menuname As String, ByVal menuvisible As Integer, ByVal menutext As String, ByVal menutype As Integer, ByVal menuurl As String)

        Dim theXMLSource As String = (ApppPath & "\menu.xml")
        Dim document As XDocument = XDocument.Load(theXMLSource)
        Dim attrAndValue As XElement =
            <link>
                <name><%= menuname %></name>
                <visible><%= menuvisible %></visible>
                <text><%= menutext %></text>
                <type><%= menutype %></type>
                <url><%= menuurl %></url>
            </link>
        document.Root.Add(attrAndValue)
        document.Save(theXMLSource)

        MsgBox(menuname & " " & menuvisible & " " & menutext & " " & menutype & " " & menuurl)


    End Sub

    Public Shared Sub deletemenuitem(ByVal menuname As String)

        'this is not being use. This deletes a node without a attribute value

        Dim theXMLSource As String = (ApppPath & "\menu.xml")
        Dim document As New XmlDocument

        document.Load(theXMLSource)

        For Each myNode As XmlNode In document.DocumentElement.FirstChild.ChildNodes
            If myNode.FirstChild.InnerText.ToString = menuname Then
                'Do While myNode.HasChildNodes
                'myNode.ParentNode.RemoveAll()
                myNode.ParentNode.RemoveAll()

                'Loop
            End If

        Next
        document.Save(theXMLSource)

        MsgBox(menuname)


    End Sub
    Public Shared Sub removemenuitem(ByVal menuname As String)

        'this is not being use. This deletes a node without a attribute value

        Dim theXMLSource As String = (ApppPath & "\menu.xml")
        Dim document As New XmlDocument
        Dim txtname As String


        document.Load(theXMLSource)

        For Each myNode As XmlNode In document.DocumentElement

            txtname = myNode.Attributes("value").InnerText

            ' MsgBox(txtname)
            If txtname = menuname Then
                myNode.ParentNode.RemoveChild(myNode)
            End If
        Next

        document.Save(theXMLSource)
        MsgBox(menuname)


    End Sub
    Public Shared Sub UpdateAppSettings(ByVal KeyName As String, ByVal KeyValue As String)

        'MsgBox(KeyName & " " & KeyValue)

        '  AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
        ' This will get the app.config file path from Current application Domain
        Dim XmlDoc As New XmlDocument()
        ' Load XML Document

        'MsgBox(ApppPath & "\vbbterm.config")
        XmlDoc.Load(ApppPath & "\vbbterm.txt")

        ' Navigate Each XML Element of app.Config file
        'MsgBox(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.ToString)
        For Each xElement As XmlElement In XmlDoc.DocumentElement
            If xElement.Name = "appSettings" Then
                ' Loop each node of appSettings Element
                ' xNode.Attributes(0).Value , Mean First Attributes of Node ,
                ' KeyName Portion
                ' xNode.Attributes(1).Value , Mean Second Attributes of Node,
                ' KeyValue Portion
                For Each xNode As XmlNode In xElement.ChildNodes
                    If xNode.Attributes(0).Value = KeyName Then
                        xNode.Attributes(1).Value = KeyValue
                    End If
                Next
            End If
        Next
        ' Save app.config file
        XmlDoc.Save(ApppPath & "\vbbterm.txt")

    End Sub

    Public Shared Function getmenuitem()


        'Dim theXMLSource As String = (ApppPath & "\menu.xml")
        'Dim XmlDoc As New XmlDocument
        Dim reader As XmlTextReader = New XmlTextReader(ApppPath & "\menu.xml")
        Dim itemname As String
        Dim udtNew As menuitemdata
        udtNew = Nothing
        itemname = ""
        'Dim keyvalue, menuitem, menuitemvalue As String
        Do While (reader.Read())
            Select Case reader.NodeType
                Case XmlNodeType.Element 'Display beginning of element.
                    Console.Write("<" + reader.Name)
                    itemname = reader.Name
                    If reader.HasAttributes Then 'If attributes exist
                        While reader.MoveToNextAttribute()
                            'Display attribute name and value.
                            udtnew.keyvalue = reader.Value
                        End While
                    End If
                    Console.WriteLine(">")
                Case XmlNodeType.Text 'Display the text in each element.

                    'MsgBox(itemname)

                    If itemname = "visible" Then
                        udtnew.visible = reader.Value
                        Console.WriteLine(reader.Value)
                    End If
                    If itemname = "text" Then
                        udtnew.keytext = reader.Value
                        Console.WriteLine(reader.Value)
                    End If
                    If itemname = "type" Then
                        udtnew.type = reader.Value
                        Console.WriteLine(reader.Value)
                    End If
                    If itemname = "url" Then
                        udtnew.url = reader.Value
                        Console.WriteLine(reader.Value)
                    End If


                Case XmlNodeType.EndElement 'Display end of element.
                    Console.Write("</" + reader.Name)
                    Console.WriteLine(">")

            End Select



        Loop
        Return udtNew
        Console.ReadLine()




    End Function

    Public Shared Function ReadAppSettings(ByVal KeyName As String)


        'Dim rowsvalue As String
        'Dim XmlReader As New XmlTextReader(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)
        Dim XmlDoc As New XmlDocument()
        Dim keyvalue As String
        keyvalue = ""
        ' Load XML Document
        XmlDoc.Load(ApppPath & "\vbbterm.txt")
        ' Navigate Each XML Element of app.Config file
        'MsgBox(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.ToString)
        For Each xElement As XmlElement In XmlDoc.DocumentElement
            If xElement.Name = "appSettings" Then
                ' Loop each node of appSettings Element
                ' xNode.Attributes(0).Value , Mean First Attributes of Node ,
                ' KeyName Portion
                ' xNode.Attributes(1).Value , Mean Second Attributes of Node,
                ' KeyValue Portion
                For Each xNode As XmlNode In xElement.ChildNodes
                    If xNode.Attributes(0).Value = KeyName Then
                        keyvalue = xNode.Attributes(1).Value
                    End If
                Next
            End If
        Next
        Return keyvalue


    End Function
    Public Shared Sub AddAppSettings(ByVal KeyName, ByVal value)

        'MsgBox(KeyName & " " & KeyValue)

        '  AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
        ' This will get the app.config file path from Current application Domain


        Dim XmlDoc As New XmlDocument()

        ' Load XML Document

        XmlDoc.Load(ApppPath & "\vbbterm.txt")

        Dim node As XmlNode = XmlDoc.SelectSingleNode("//appSettings")



        Dim elem As XmlElement

        elem = XmlDoc.CreateElement("add")
        elem.SetAttribute("key", KeyName)
        elem.SetAttribute("value", value)
        node.AppendChild(elem)

        ' Save app.config file
        XmlDoc.Save(ApppPath & "\vbbterm.txt")

    End Sub
    Public Shared Sub DeleteAppSettings(ByVal KeyName)


        Dim XmlDoc As New XmlDocument()

        XmlDoc.Load(ApppPath & "\vbbterm.txt")

        Dim nod As XmlNode = XmlDoc.SelectSingleNode(KeyName)
        If nod IsNot Nothing Then
            ' Since we found Bob's node, we will remove
            ' it and all of his information.
            nod.ParentNode.RemoveChild(nod)
        Else
            ' Where's Bob?
            MessageBox.Show("Couldn't find Bob.", "Where's Bob?", MessageBoxButtons.OK, _
                MessageBoxIcon.Information)
        End If


        ' Save app.config file
        XmlDoc.Save(ApppPath & "\vbbterm.txt")

    End Sub
End Class

Friday, September 30, 2011

How to parse a IP address from a string using VB.NET

This code is simple. Have a textbox1 with a traceroute for example pasted into it. Click the button and show the IP address for each line. I use this to match IP addresses to a list so it will (when finished) translate the IP addresses to names. I do not have a DNS lookup which would be much easier but the layers of security to do a DNS lookup might make the process more complicated than it needs to be.

Imports System.Text.RegularExpressions

Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Dim line, As String
       
        Dim rx As New Regex("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
       
        For i as integer = 0 To TextBox1.Lines.Count - 1
            ' Read one line from file
            line = TextBox1.Lines(i)
            Dim match As Match = rx.Match(line)
            If match.Success Then
                MsgBox(match.Value)
            End If
        Next

 End Sub

End Class