Click here to Skip to main content
15,921,279 members
Articles / Desktop Programming / WPF

WPF: OpenWeather

Rate me:
Please Sign up or sign in to vote.
4.98/5 (62 votes)
15 Sep 2017CPOL2 min read 164.1K   8.1K   123   74
WPF-MVVM weather forecast application that displays weather data using the OpenWeatherMap API


OpenWeather is a WPF-MVVM weather forecast application that displays three day (current day + two days following) forecast for a particular location. The app makes use of the OpenWeatherMap API.

To get the project code, clone or download the project from GitHub.


I wrote the first version of this app back in 2013, when the OpenWeatherMap API was still in beta. After taking a look at the old code, I decided it was time for a rewrite. As part of the update, the UI has been redesigned and hopefully looks much better than before.

ye olde app UI


To use this project effectively, you require the following:

  • OpenWeatherMap App ID
  • Internet connection
  • Visual Studio 2015/17

Once you get your App ID, insert it as the value of the APP_ID constant in the OpenWeatherMapService class.

private const string APP_ID = "PLACE-YOUR-APP-ID-HERE";
Private Const APP_ID As String = "PLACE-YOUR-APP-ID-HERE"


The OpenWeatherMap API provides weather data in XML, JSON, and HTML formats. The service is free for limited API calls – less than 60 calls per minute, and maximum 5 day forecast.

This project makes use of the XML response:

    <location altitude="0" latitude="-1.2834" longitude="36.8167" 
     geobase="geonames" geobaseid="184745"/>
  <sun rise="2017-08-17T03:34:28" set="2017-08-17T15:38:48"/>
    <time day="2017-08-17">
      <symbol number="501" name="moderate rain" var="10d"/>
      <precipitation value="5.03" type="rain"/>
      <windDirection deg="54" code="NE" name="NorthEast"/>
      <windSpeed mps="1.76" name="Light breeze"/>
      <temperature day="24.55" min="16.92" max="24.55" 
                   night="16.92" eve="24.55" morn="24.55"/>
      <pressure unit="hPa" value="832.78"/>
      <humidity value="95" unit="%"/>
      <clouds value="scattered clouds" all="48" unit="%"/>
    <time day="2017-08-18">
      <symbol number="500" name="light rain" var="10d"/>
      <precipitation value="0.65" type="rain"/>
      <windDirection deg="109" code="ESE" name="East-southeast"/>
      <windSpeed mps="1.62" name="Light breeze"/>
      <temperature day="21.11" min="14.33" max="23.5" 
                   night="17.81" eve="21.48" morn="14.33"/>
      <pressure unit="hPa" value="836.23"/>
      <humidity value="62" unit="%"/>
      <clouds value="clear sky" all="8" unit="%"/>
    <time day="2017-08-19">
      <symbol number="500" name="light rain" var="10d"/>
      <precipitation value="2.47" type="rain"/>
      <windDirection deg="118" code="ESE" name="East-southeast"/>
      <windSpeed mps="1.56" name=""/>
      <temperature day="22.55" min="12.34" max="22.55" 
                   night="15.46" eve="20.92" morn="12.34"/>
      <pressure unit="hPa" value="836.28"/>
      <humidity value="56" unit="%"/>
      <clouds value="clear sky" all="0" unit="%"/>

Fetching Forecast Data

Getting the forecast data is done by a function in the implementation of an interface named IWeatherService.

public class OpenWeatherMapService : IWeatherService
    private const string APP_ID = "PLACE-YOUR-APP-ID-HERE";
    private const int MAX_FORECAST_DAYS = 5;
    private HttpClient client;

    public OpenWeatherMapService()
        client = new HttpClient();
        client.BaseAddress = new Uri("");

    public async Task<IEnumerable<WeatherForecast>> 
           GetForecastAsync(string location, int days)
        if (location == null) throw new ArgumentNullException("Location can't be null.");
        if (location == string.Empty) throw new ArgumentException
           ("Location can't be an empty string.");
        if (days <= 0) throw new ArgumentOutOfRangeException
           ("Days should be greater than zero.");
        if (days > MAX_FORECAST_DAYS) throw new ArgumentOutOfRangeException
           ($"Days can't be greater than {MAX_FORECAST_DAYS}");

        var query = $"forecast/daily?q={location}&type=accurate&mode=xml&units=metric&
        var response = await client.GetAsync(query);

        switch (response.StatusCode)
            case HttpStatusCode.Unauthorized:
                throw new UnauthorizedApiAccessException("Invalid API key.");
            case HttpStatusCode.NotFound:
                throw new LocationNotFoundException("Location not found.");
            case HttpStatusCode.OK:
                var s = await response.Content.ReadAsStringAsync();
                var x = XElement.Load(new StringReader(s));

                var data = x.Descendants("time").Select(w => new WeatherForecast
                    Description = w.Element("symbol").Attribute("name").Value,
                    ID = int.Parse(w.Element("symbol").Attribute("number").Value),
                    IconID = w.Element("symbol").Attribute("var").Value,
                    Date = DateTime.Parse(w.Attribute("day").Value),
                    WindType = w.Element("windSpeed").Attribute("name").Value,
                    WindSpeed = double.Parse(w.Element("windSpeed").Attribute("mps").Value),
                    WindDirection = w.Element("windDirection").Attribute("code").Value,
                    DayTemperature = double.Parse
                    NightTemperature = double.Parse
                    MaxTemperature = double.Parse
                    MinTemperature = double.Parse
                    Pressure = double.Parse(w.Element("pressure").Attribute("value").Value),
                    Humidity = double.Parse(w.Element("humidity").Attribute("value").Value)

                return data;
                throw new NotImplementedException(response.StatusCode.ToString());
Public Class OpenWeatherMapService
    Implements IWeatherService

    Private Const APP_ID As String = "PLACE-YOUR-APP-ID-HERE"
    Private Const MAX_FORECAST_DAYS As Integer = 5
    Private client As HttpClient

    Public Sub New()
        client = New HttpClient
        client.BaseAddress = New Uri("")
    End Sub

    Public Async Function GetForecastAsync(location As String,
                                           days As Integer) _
                                           As Task(Of IEnumerable(Of WeatherForecast)) _
                                           Implements IWeatherService.GetForecastAsync
        If location Is Nothing Then Throw New ArgumentNullException("Location can't be null.")
        If location = String.Empty Then Throw New ArgumentException_
                      ("Location can't be an empty string.")
        If days <= 0 Then Throw New ArgumentOutOfRangeException_
                     ("Days should be greater than zero.")
        If days > MAX_FORECAST_DAYS Then Throw New ArgumentOutOfRangeException_
                  ($"Days can't be greater than {MAX_FORECAST_DAYS}.")

        Dim query = $"forecast/daily?q={location}&type=accurate&_
        Dim response = Await client.GetAsync(query)

        Select Case response.StatusCode
            Case HttpStatusCode.Unauthorized
                Throw New UnauthorizedApiAccessException("Invalid API key.")
            Case HttpStatusCode.NotFound
                Throw New LocationNotFoundException("Location not found.")
            Case HttpStatusCode.OK
                Dim s = Await response.Content.ReadAsStringAsync()
                Dim x = XElement.Load(New StringReader(s))
                Dim data = x...<time>.Select(Function(w) New WeatherForecast With {
                                                 .Description = w.<symbol>.@name,
                                                 .ID = w.<symbol>.@number,
                                                 .IconID = w.<symbol>.@var,
                                                 .[Date] = w.@day,
                                                 .WindType = w.<windSpeed>.@name,
                                                 .WindSpeed = w.<windSpeed>.@mps,
                                                 .WindDirection = w.<windDirection>.@code,
                                                 .DayTemperature = w.<temperature>.@day,
                                                 .NightTemperature = w.<temperature>.@night,
                                                 .MaxTemperature = w.<temperature>.@max,
                                                 .MinTemperature = w.<temperature>.@min,
                                                 .Pressure = w.<pressure>.@value,
                                                 .Humidity = w.<humidity>.@value})
                Return data
            Case Else
                Throw New NotImplementedException(response.StatusCode.ToString())
        End Select
    End Function
End Class

In GetForecastAsync(), I'm fetching the data asynchronously and using LINQ to XML to create a collection of WeatherForecast objects. (In the VB code, I'm using XML axis properties to access XElement objects and to extract values from the necessary attributes.) A command in WeatherViewModel will be used to call this function.

private ICommand _getWeatherCommand;
public ICommand GetWeatherCommand
        if (_getWeatherCommand == null) _getWeatherCommand =
                new RelayCommandAsync(() => GetWeather(), (o) => CanGetWeather());
        return _getWeatherCommand;

public async Task GetWeather()
        var weather = await weatherService.GetForecastAsync(Location, 3);
        CurrentWeather = weather.First();
        Forecast = weather.Skip(1).Take(2).ToList();
    catch (HttpRequestException ex)
        ("Ensure you're connected to the internet!", "Open Weather");
    catch (LocationNotFoundException ex)
        dialogService.ShowNotification("Location not found!", "Open Weather");
Private Property _getWeatherCommand As ICommand
Public ReadOnly Property GetWeatherCommand As ICommand
        If _getWeatherCommand Is Nothing Then _getWeatherCommand =
                New RelayCommandAsync(Function() GetWeather(), Function() CanGetWeather())
        Return _getWeatherCommand
    End Get
End Property

Public Async Function GetWeather() As Task
        Dim weather = Await weatherService.GetForecastAsync(Location, 3)
        CurrentWeather = weather.First
        Forecast = weather.Skip(1).Take(2).ToList
    Catch ex As HttpRequestException
        ("Ensure you're connected to the internet!", "Open Weather")
    Catch ex As LocationNotFoundException
        DialogService.ShowNotification("Location not found!", "Open Weather")
    End Try
End Function

The GetWeatherCommand is fired when the user types in a location and presses the Enter key.

<TextBox x:Name="LocationTextBox" 
 SelectionBrush="{StaticResource PrimaryLightBrush}" Margin="7,0"
            controls:TextBoxHelper.Watermark="Type location & press Enter"
            Text="{Binding Location, UpdateSourceTrigger=PropertyChanged}">
        <KeyBinding Command="{Binding GetWeatherCommand}" Key="Enter"/>

Displaying the Data

The current weather data is displayed in a user control named CurrentWeatherControl. The control displays a weather icon, temperature, weather description, maximum and minimum temperatures, and wind speed.

<UserControl x:Class="OpenWeatherCS.Controls.CurrentWeatherControl"
               Height="180" MinHeight="180" MinWidth="300"
               d:DesignHeight="180" d:DesignWidth="300"
               d:DataContext="{d:DesignInstance Type=data:SampleWeatherViewModel, 
    <Grid Background="{StaticResource PrimaryMidBrush}">
            <RowDefinition Height="106"/>

            <!-- Weather icon -->
            <Image Margin="5">
                    <MultiBinding Converter="{StaticResource WeatherIconConverter}" 
                        <Binding Path="CurrentWeather.ID"/>
                        <Binding Path="CurrentWeather.IconID"/>
            <!-- Current temperature -->
            <TextBlock Grid.Column="1" 
             Style="{StaticResource WeatherTextStyle}" FontSize="60">
                    <MultiBinding Converter="{StaticResource TemperatureConverter}" 
                        <Binding Path="CurrentWeather.IconID"/>
                        <Binding Path="CurrentWeather.DayTemperature"/>
                        <Binding Path="CurrentWeather.NightTemperature"/>

        <!-- Weather description -->
        <Grid Grid.Row="1" Background="{StaticResource PrimaryDarkBrush}">
            <TextBlock Grid.Row="1" Style="{StaticResource WeatherTextStyle}"
                       Foreground="#FFE9F949" TextTrimming="CharacterEllipsis" Margin="5,0"
                       Text="{Binding CurrentWeather.Description}"/>

        <Grid Grid.Row="2" Background="#FF14384F">

            <!-- Min and max temperatures -->
            <Border Background="{StaticResource PrimaryLightBrush}" 
                <TextBlock Grid.Row="1" Style="{StaticResource WeatherTextStyle}">
                    <Run Text="{Binding CurrentWeather.MaxTemperature, 
                    <Run Text="/" Foreground="Gray"/>
                    <Run Text="{Binding CurrentWeather.MinTemperature, 

            <!-- Wind speed -->
            <StackPanel Grid.Column="1" Orientation="Horizontal" 
                <!-- Icon -->
                <Viewbox Margin="5">
                    <Canvas Width="24" Height="24">
                        <Path Data="M4,10A1,1 0 0,1 3,9A1,1 0 0,1 4,8H12A2,
                                 2 0 0,0 14,6A2,2 0 0,0 12,
                                 4C11.45,4 10.95,4.22 10.59,4.59C10.2,5 9.56,
                                 5 9.17,4.59C8.78,4.2 8.78,
                                 3.56 9.17,3.17C9.9,2.45 10.9,2 12,2A4,4 0 0,
                                 1 16,6A4,4 0 0,1 12,10H4M19,
                                 12A1,1 0 0,0 20,11A1,1 0 0,0 19,10C18.72,
                                 10 18.47,10.11 18.29,10.29C17.9,
                                 10.68 17.27,10.68 16.88,10.29C16.5,9.9 16.5,
                                 9.27 16.88,8.88C17.42,8.34 18.17,
                                 8 19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14H5A1,
                                 1 0 0,1 4,13A1,1 0 0,1 5,12H19M18,
                                 18H4A1,1 0 0,1 3,17A1,1 0 0,1 4,16H18A3,
                                 3 0 0,1 21,19A3,3 0 0,1 18,22C17.17,
                                 22 16.42,21.66 15.88,21.12C15.5,20.73 15.5,
                                 20.1 15.88,19.71C16.27,19.32 16.9,
                                 19.32 17.29,19.71C17.47,19.89 17.72,20 18,
                                 20A1,1 0 0,0 19,19A1,1 0 0,0 18,18Z" 
                              Fill="#FF9B8C5E" />
                <!-- Speed -->
                <TextBlock Grid.Column="1" Style="{StaticResource WeatherTextStyle}"
                           Text="{Binding CurrentWeather.WindSpeed, 
                           StringFormat={}{0:F0} mps}"/>

The rest of the forecast data is displayed in an ItemsControl using a data template which shows the day of the forecast, weather icon, maximum and minimum temperatures, and wind speed.

<DataTemplate x:Key="ForecastDataTemplate">
        <Storyboard x:Key="OnTemplateLoaded">
                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1">
                        <QuinticEase EasingMode="EaseOut"/>
    <Border x:Name="RootBorder" Height="200" Width="140" Margin="0,0,-1,0" 
               Background="{StaticResource PrimaryDarkBrush}" 
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            <Border BorderThickness="1,1,1,0"
                       BorderBrush="{StaticResource PrimaryDarkBrush}" 
                       Background="{StaticResource PrimaryMidBrush}">
                <!-- Day of the week -->
                <TextBlock Style="{StaticResource WeatherTextStyle}" FontWeight="Normal"
                              Margin="5" Foreground="#FFADB982"
                              Text="{Binding Date, StringFormat={}{0:dddd}}"/>
            <!-- Weather icon -->
            <Border Grid.Row="1" BorderThickness="0,1,1,0"
                       BorderBrush="{StaticResource PrimaryDarkBrush}"
                       Background="{StaticResource PrimaryDarkBrush}">
                <Image MaxWidth="100" Margin="5,0,5,5">
                        <MultiBinding Converter="{StaticResource WeatherIconConverter}" 
                            <Binding Path="ID"/>
                            <Binding Path="IconID"/>
            <!-- Min and max temperatures -->
            <Border Grid.Row="2" BorderThickness="1"
                       BorderBrush="{StaticResource PrimaryDarkBrush}"
                       Background="{StaticResource PrimaryLightBrush}">
                <TextBlock Grid.Row="0" Style="{StaticResource WeatherTextStyle}" 
                              Margin="5" Foreground="#FFAEBFAE">
                                <Run Text="{Binding MaxTemperature, StringFormat={}{0:F0}°}"/>
                                <Run Text="/" Foreground="Gray"/>
                                <Run Text="{Binding MinTemperature, StringFormat={}{0:F0}°}"/>
            <Border Grid.Row="3" BorderThickness="1,0,1,1" 
                       BorderBrush="{StaticResource PrimaryDarkBrush}"
                       Background="{StaticResource PrimaryMidBrush}">
                <!-- Wind speed -->
                <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Center">
                    <Viewbox Margin="0,5,5,5">
                        <Canvas Width="24" Height="24">
                            <Path Data="M4,10A1,1 0 0,1 3,9A1,1 0 0,1 4,8H12A2,2 0 0,0 14,6A2,
                                           2 0 0,0 12,4C11.45,4 10.95,4.22 10.59,
                                           4.59C10.2,5 9.56,5 9.17,
                                           4.59C8.78,4.2 8.78,3.56 9.17,3.17C9.9,
                                           2.45 10.9,2 12,2A4,4 0 0,
                                           1 16,6A4,4 0 0,1 12,10H4M19,12A1,
                                           1 0 0,0 20,11A1,1 0 0,0 19,
                                           10C18.72,10 18.47,10.11 18.29,
                                           10.29C17.9,10.68 17.27,10.68 16.88,
                                           10.29C16.5,9.9 16.5,9.27 16.88,
                                           8.88C17.42,8.34 18.17,8 19,8A3,
                                           3 0 0,1 22,11A3,3 0 0,1 19,14H5A1,
                                           1 0 0,1 4,13A1,1 0 0,1 5,12H19M18,
                                           18H4A1,1 0 0,1 3,17A1,1 0 0,1 4,
                                           16H18A3,3 0 0,1 21,19A3,3 0 0,1 18,
                                           22C17.17,22 16.42,21.66 15.88,
                                           21.12C15.5,20.73 15.5,20.1 15.88,
                                           19.71C16.27,19.32 16.9,19.32 17.29,
                                           19.71C17.47,19.89 17.72,20 18,
                                           20A1,1 0 0,0 19,19A1,1 0 0,0 18,18Z" 
                                     Fill="#FF9B8C5E" />
                    <!-- Speed -->
                    <TextBlock Grid.Column="1" Style="{StaticResource WeatherTextStyle}" 
                                  Text="{Binding WindSpeed, StringFormat={}{0:F0} mps}"/>

The weather icons that are displayed are from VClouds and I'm using a converter to ensure the appropriate icon is displayed.

public class WeatherIconConverter : IMultiValueConverter
    public object Convert(object[] values, 
           Type targetType, object parameter, CultureInfo culture)
        var id = (int)values[0];
        var iconID = (string)values[1];

        if (iconID == null) return Binding.DoNothing;

        var timePeriod = iconID.ToCharArray()[2]; // This is either d or n (day or night)
        var pack = "pack://application:,,,/OpenWeather;component/WeatherIcons/";
        var img = string.Empty;

        if (id >= 200 && id < 300) img = "thunderstorm.png";
        else if (id >= 300 && id < 500) img = "drizzle.png";
        else if (id >= 500 && id < 600) img = "rain.png";
        else if (id >= 600 && id < 700) img = "snow.png";
        else if (id >= 700 && id < 800) img = "atmosphere.png";
        else if (id == 800) img = (timePeriod == 'd') ? "clear_day.png" : "clear_night.png";
        else if (id == 801) img = (timePeriod == 'd') ? 
                            "few_clouds_day.png" : "few_clouds_night.png";
        else if (id == 802 || id == 803) img = (timePeriod == 'd') ? 
                              "broken_clouds_day.png" : "broken_clouds_night.png";
        else if (id == 804) img = "overcast_clouds.png";
        else if (id >= 900 && id < 903) img = "extreme.png";
        else if (id == 903) img = "cold.png";
        else if (id == 904) img = "hot.png";
        else if (id == 905 || id >= 951) img = "windy.png";
        else if (id == 906) img = "hail.png";

        Uri source = new Uri(pack + img);

        BitmapImage bmp = new BitmapImage();
        bmp.UriSource = source;

        return bmp;

    public object[] ConvertBack(object value, Type[] targetTypes, 
                                object parameter, CultureInfo culture)
        return (object[])Binding.DoNothing;
Public Class WeatherIconConverter
    Implements IMultiValueConverter

    Public Function Convert(values() As Object, targetType As Type, parameter As Object,
                            culture As CultureInfo) As Object _
                            Implements IMultiValueConverter.Convert
        Dim id = CInt(values(0))
        Dim iconID = CStr(values(1))

        If iconID Is Nothing Then Return Binding.DoNothing

        Dim timePeriod = iconID.ElementAt(2) ' This is either d or n (day or night)
        Dim pack = "pack://application:,,,/OpenWeather;component/WeatherIcons/"
        Dim img = String.Empty

        If id >= 200 AndAlso id < 300 Then
            img = "thunderstorm.png"
        ElseIf id >= 300 AndAlso id < 500 Then
            img = "drizzle.png"
        ElseIf id >= 500 AndAlso id < 600 Then
            img = "rain.png"
        ElseIf id >= 600 AndAlso id < 700 Then
            img = "snow.png"
        ElseIf id >= 700 AndAlso id < 800 Then
            img = "atmosphere.png"
        ElseIf id = 800 Then
            If timePeriod = "d" Then img = "clear_day.png" Else img = "clear_night.png"
        ElseIf id = 801 Then
            If timePeriod = "d" Then img = "few_clouds_day.png" _
                                Else img = "few_clouds_night.png"
        ElseIf id = 802 Or id = 803 Then
            If timePeriod = "d" Then img = "broken_clouds_day.png" _
                                Else img = "broken_clouds_night.png"
        ElseIf id = 804 Then
            img = "overcast_clouds.png"
        ElseIf id >= 900 AndAlso id < 903 Then
            img = "extreme.png"
        ElseIf id = 903 Then
            img = "cold.png"
        ElseIf id = 904 Then
            img = "hot.png"
        ElseIf id = 905 Or id >= 951 Then
            img = "windy.png"
        ElseIf id = 906 Then
            img = "hail.png"
        End If

        Dim source As New Uri(pack & img)

        Dim bmp As New BitmapImage
        bmp.UriSource = source

        Return bmp
    End Function

    Public Function ConvertBack(value As Object, targetTypes() As Type,
                                parameter As Object, culture As CultureInfo) _
                                As Object() Implements IMultiValueConverter.ConvertBack
        Return Binding.DoNothing
    End Function
End Class

The choice of which icon to display is based on the list of weather condition codes specified here.


While the OpenWeatherMap API has some limitations for free usage, it is still quite a suitable and well documented API. Hopefully, you have learnt something useful from this article and can now more easily go about using the API with your XAML applications.


  • 1st August, 2013: Initial post
  • 20th August, 2017: Updated code and article


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Written By
Software Developer
Kenya Kenya
Experienced C# software developer with a passion for WPF.

  • CodeProject MVP 2013
  • CodeProject MVP 2012
  • CodeProject MVP 2021

Comments and Discussions

GeneralMy vote of 5 Pin
Member 43394615-Apr-20 4:48
Member 43394615-Apr-20 4:48 
Questionsource code Pin
Member 141075567-Jan-19 14:45
Member 141075567-Jan-19 14:45 
QuestionThe additional 2 days template Pin
Member 1395614020-Aug-18 21:55
Member 1395614020-Aug-18 21:55 
QuestionWorking with free account by changing the following Pin
FrankoD731-Apr-18 2:18
FrankoD731-Apr-18 2:18 
QuestionApp does not work for me... Pin
Dirk Bahle10-Feb-18 0:18
Dirk Bahle10-Feb-18 0:18 
AnswerRe: App does not work for me... Pin
Meshack Musundi10-Feb-18 1:12
professionalMeshack Musundi10-Feb-18 1:12 
GeneralRe: App does not work for me... Pin
Dirk Bahle10-Feb-18 2:24
Dirk Bahle10-Feb-18 2:24 
GeneralRe: App does not work for me... Pin
Meshack Musundi10-Feb-18 2:56
professionalMeshack Musundi10-Feb-18 2:56 
GeneralRe: App does not work for me... Pin
Member 1012588319-Apr-18 19:42
Member 1012588319-Apr-18 19:42 
Question401 code is returned when "daily" is used in query Pin
Frank nKansas31-Oct-17 6:22
Frank nKansas31-Oct-17 6:22 
AnswerRe: 401 code is returned when "daily" is used in query Pin
Frank nKansas31-Oct-17 8:57
Frank nKansas31-Oct-17 8:57 
AnswerRe: 401 code is returned when "daily" is used in query Pin
Meshack Musundi31-Oct-17 23:50
professionalMeshack Musundi31-Oct-17 23:50 
GeneralRe: 401 code is returned when "daily" is used in query Pin
Frank nKansas1-Nov-17 4:45
Frank nKansas1-Nov-17 4:45 
QuestionErrors in VS2017 Pin
FredAu18-Sep-17 21:01
FredAu18-Sep-17 21:01 
AnswerRe: Errors in VS2017 Pin
Meshack Musundi19-Sep-17 0:15
professionalMeshack Musundi19-Sep-17 0:15 
GeneralRe: Errors in VS2017 Pin
FredAu20-Sep-17 1:05
FredAu20-Sep-17 1:05 
GeneralRe: Errors in VS2017 Pin
Meshack Musundi20-Sep-17 1:59
professionalMeshack Musundi20-Sep-17 1:59 
GeneralRe: Errors in VS2017 Pin
FredAu20-Sep-17 21:06
FredAu20-Sep-17 21:06 
GeneralRe: Errors in VS2017 Pin
Dirk Bahle9-Feb-18 23:40
Dirk Bahle9-Feb-18 23:40 
GeneralRe: Errors in VS2017 Pin
JohnOkula23-Sep-18 7:01
JohnOkula23-Sep-18 7:01 
QuestionCan you make a version that runs in vs 2015? Pin
antiDaveman23-Mar-16 8:07
antiDaveman23-Mar-16 8:07 
GeneralRe: Can you make a version that runs in vs 2015? Pin
Meshack Musundi23-Mar-16 18:52
professionalMeshack Musundi23-Mar-16 18:52 
QuestionUser Control Pin
Member 358062921-Oct-15 3:36
Member 358062921-Oct-15 3:36 
QuestionRe: User Control Pin
Meshack Musundi21-Oct-15 6:35
professionalMeshack Musundi21-Oct-15 6:35 
Questionask with vb6 Pin
joelin13915-Jul-15 12:01
joelin13915-Jul-15 12:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.