Я не сделал то, о чем вы спрашиваете, но если бы я сделал это, я бы выбрал подход.Во-первых, вы должны наметить все возможные пути логики.Таким образом, у вас будет набор вопросов и на каждый из этих вопросов будет набор возможных ответов.Затем к каждому из этих ответов приходят новые наборы вопросов.Таким образом, это будет логически создавать график наборов возможных вопросов и их возможных ответов.Я бы кодифицировал это отношение как объекты Вопроса и Ответа.Кроме того, вам нужно будет определиться с объектом Response, чтобы указать, что делать дальше (либо укажите новый набор вопросов, либо он завершен).Таким образом, следуя этой линии мышления, вы получите график, или, точнее, древовидную структуру.И это можно повторить просто так, используя стек:
// need to pull the Initial Set of Questions to start
List<Question> currentQuestions = GetInitalQuestions();
// a stack to track the chosen responses, so we can unwind if needed
Stack<Response> responseStack = new Stack<Response>();
// out exit condition is when currentQuestions is null
while(currentQuestions != null)
{
// display the questions and get the user's response
Response resp = DisplayQuestions(currentQuestions);
// if we need to back up...
if (resp == Response.Back)
{
// make sure we have something to fall back to...
if (responseStack.Count > 0)
resp = responseStack.Pop();
else
HandleAtBeginningOfStack();
}
else
{
// add the chosen response to the stack
responseStack.Push(resp);
}
// get the next set of questions based on the response, unless we are at the end
if (resp.IsFinal)
currentQuestions = null;
else
currentQuestions = GetQuestionSetFromResponse(resp);
}
Поскольку это основная логика, вам нужно будет создать пользовательский интерфейс для представления Вопросов и Ответов.Я бы создал форму с одной панелью.В форме есть метод DrawPanel или что-то в этом роде, когда он передает набор Вопросов и их ответов, он очищает Panel и создает необходимые элементы управления.Таким образом, он будет динамически создавать отображение, поскольку вопросы и ответы выбираются пользователем.Так как у нас есть стек выбранных ответов, вы можете использовать его где-нибудь в форме, чтобы отобразить пользователю ранее выбранные варианты.