public async Task StartAsync(IDialogContext context)
        {
            var state = new VerticalChoiceForm();

            var form = new FormDialog <VerticalChoiceForm>(
                state,
                BuildForm,
                FormOptions.PromptInStart);

            context.Call(form, this.AfterBuildForm);
        }
        private async Task AfterBuildForm(IDialogContext context, IAwaitable <object> result)
        {
            try
            {
                var o = await result;

                if (o.GetType() == typeof(VerticalChoiceForm))
                {
                    VerticalChoiceForm verticalChoiceForm = await result as VerticalChoiceForm;

                    if (verticalChoiceForm.VerticalA.HasValue)
                    {
                        context.UserData.SetValue <int>(ContextKeys.VerticalId, (int)verticalChoiceForm.VerticalA.Value);
                    }
                    else if (verticalChoiceForm.VerticalB.HasValue)
                    {
                        context.UserData.SetValue <int>(ContextKeys.VerticalId, (int)verticalChoiceForm.VerticalB.Value);
                    }
                    else if (verticalChoiceForm.VerticalC.HasValue)
                    {
                        context.UserData.SetValue <int>(ContextKeys.VerticalId, (int)verticalChoiceForm.VerticalC.Value);
                    }

                    context.Done(verticalChoiceForm);
                }
                else
                {
                    context.Done("ERROR");
                }
            }
            catch (FormCanceledException ex)
            {
                context.Done("QUIT");
            }
            catch (Exception ex)
            {
                await context.PostAsync("I'm sorry, Vertical Choice Form encountered a problem.");

                context.Done("ERROR");
            }
        }