将绑定检查添加到具有多个屏幕的 WinForms

本文关键字:屏幕 WinForms 绑定 检查 添加 | 更新日期: 2023-09-27 17:53:46

我有一个winforms应用程序,它向用户提问,并允许他们通过单击"下一步"并按"上一个"返回上一个问题来前进到下一个问题。

我目前设置了从 XML 中读取问题的控件(因此问题的数量是动态的,而不是硬编码的(,这次有 10 个问题。

这是我的代码:

private void DisplayQuestion(int questionNumber)
{
  var qNumber = _xmlHandler.Questions[questionNumber];
  if (string.Equals(qNumber.QuestionType, "ComboBoxControl"))
  {
    controlPanel.Controls.Clear();
    var comboBox = new ComboBoxControl();
    comboBox.Dock = DockStyle.Fill;
    controlPanel.Controls.Add(comboBox);
  }
}
private void buttonNext_Click(object sender, EventArgs e)
{
  DisplayQuestion(++_questionNumber);
}
private void buttonBack_Click(object sender, EventArgs e)
{
  DisplayQuestion(--_questionNumber);
}

这现在对我有用,但是,正如预期的那样,当我在第一个屏幕上点击"上一个"并在最后一个(第 10 个(屏幕上点击"下一个"时,我会收到异常错误。 如何向上述代码添加边界,以允许用户来回多次,同时确保它们不会低于 0 或超过 10?

我尝试使用基本的 for 循环,但我发现即使使用我编写的循环,当"下一个"被点击 10 次时,它也会结束 - 即使您也多次点击"上一个"并且可能只在问题 #5 上,因为你跳过它们并再次返回。

将绑定检查添加到具有多个屏幕的 WinForms

private void buttonNext_Click(object sender, EventArgs e)
{
    if (_questionNumber == 10)
        return;
    DisplayQuestion(++_questionNumber);
}
private void buttonBack_Click(object sender, EventArgs e)
{
    if (_questionNumber == 1)
        return;
    DisplayQuestion(--_questionNumber);
}

假设您的事件可以访问 _xmlHandler.Questions ,请在更改集合之前根据集合中的元素数检查 _questionNumber 的值。这样,您将来添加或删除问题时就不必更改数字。

private void buttonNext_Click(object sender, EventArgs e)
{
  if (_questionNumber < _xmlHandler.Questions.Count - 1)
    DisplayQuestion(++_questionNumber);
}
private void buttonBack_Click(object sender, EventArgs e)
{
  if (_questionNumber > 0)
    DisplayQuestion(--_questionNumber);
}