I received a question about how to create extension methods in VB. It turns out that the key difference is that the extension must be defined in a Module and not in a class.
Thus, building on the code from the previous example, we end up with the same Page.xaml and a very similar Page.xaml.vb and a quite different Extension.vb
Here is Extension.vb
Imports Microsoft.VisualBasic Imports System Namespace GetLastNFromString Module ExtensionModule <System.Runtime.CompilerServices.Extension()> _ Public Function Right(ByVal s As String, _
ByVal howMany As Integer) As String If howMany <= s.Length Then Return s.Substring(s.Length - howMany, howMany) Else Return s End If End Function End Module End Namespace
And here is Page.xaml.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Net Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Documents Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Media.Animation Imports System.Windows.Shapes Namespace GetLastNFromString Partial Public Class Page Inherits UserControl Public Sub New() InitializeComponent() AddHandler GoButton.Click, AddressOf GoButton_Click End Sub Private Sub GoButton_Click( _ ByVal sender As Object, _ ByVal e As RoutedEventArgs) ResultBox.Text = _
StringToParse.Text.Right(Convert.ToInt32 (NumberToGet.Text)) End Sub End Class End Namespace
For completeness, here is Page.xaml
<UserControl x:Class="GetLastNFromString.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Width="650" Height="200"> <Grid x:Name="LayoutRoot" Background="Bisque"> <Grid.RowDefinitions> <RowDefinition Height="1.5*" /> <RowDefinition Height="1*" /> <RowDefinition Height="1*" /> <RowDefinition Height="1*" /> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*" /> <ColumnDefinition Width="2*" /> </Grid.ColumnDefinitions> <TextBlock HorizontalAlignment="Center" Margin="0,0,0,0" x:Name="Title" Grid.ColumnSpan="2" FontFamily="Georgia" FontSize="36" Foreground="#FF0C42EE" Text="Last n Traditional (VB)" TextWrapping="Wrap" /> <TextBlock x:Name="String_Prompt" Text="String" Width="Auto" Grid.Row="1" Margin="0,0,10,0" Foreground="Blue" FontFamily="Georgia" FontSize="24" VerticalAlignment="Bottom" HorizontalAlignment="Right" /> <TextBlock x:Name="NumChars_Prompt" Text="Number To Get" Grid.Row="2" Margin="0,0,10,0" Foreground="Blue" FontFamily="Georgia" FontSize="24" VerticalAlignment="Bottom" HorizontalAlignment="Right" /> <TextBlock x:Name="Result" Text="Result" Grid.Row="3" Margin="0,0,10,0" Foreground="Blue" FontFamily="Georgia" FontSize="24" VerticalAlignment="Bottom" HorizontalAlignment="Right" /> <TextBox FontFamily="Georgia" FontSize="24" HorizontalAlignment="Left" Margin="5,0,0,2" x:Name="StringToParse" VerticalAlignment="Bottom" Width="400" Grid.Column="1" Grid.Row="1" Text="" /> <TextBox x:Name="NumberToGet" FontFamily="Georgia" FontSize="24" HorizontalAlignment="Left" Margin="5,0,0,0" VerticalAlignment="Bottom" Width="Auto" Grid.Column="1" Grid.Row="2" Text="?" /> <TextBlock x:Name="ResultBox" HorizontalAlignment="Left" Margin="5,0,0,0" VerticalAlignment="Bottom" Grid.Column="1" Grid.Row="3" FontFamily="Georgia" FontSize="24" Text="" /> <Button x:Name="GoButton" Content=" Go! " Grid.Row="4" Grid.Column="0" FontFamily="Georgia" FontSize="18" Foreground="Blue" HorizontalAlignment="Right" Margin="5" Width="Auto" /> </Grid> </UserControl>