65.9K
CodeProject 正在变化。 阅读更多。
Home

另一个使用选项卡控件的 .NET 向导

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.93/5 (15投票s)

2002年12月22日

3分钟阅读

viewsIcon

104129

downloadIcon

2531

另一个使用选项卡控件的 .NET 向导

Sample Image - WizardForm.jpg

引言

几个月前,我开始使用 .NET framework 和 C# 进行开发。 习惯了 MFC,我很失望没有找到一个类来创建一个向导。 我检查了网络,找到了 James T. Johnson 的向导框架。 但事实上,我发现它使用和设计起来有点复杂,所以我开发了自己的。 想法是简化向导的设计并重用 MFC 概念。

使用 MFC,创建向导与创建选项卡控件和选项卡页面的过程相同。 因此,我决定重用 Visual Studio .NET 向导来创建选项卡控件并进行处理。

最终结果是一个对话框,带有一个空的选项卡控件,必须继承它。 在设计时,开发人员创建选项卡页面并用他想要的控件填充它们。 在运行时,对话框充当向导,隐藏选项卡控件。

简单向导的设计

对话框向导的继承

在 Visual Studio.net 中使用“添加继承窗体”向导,并在继承选择器对话框中选择WizardForm

 

您的项目中有以下窗体

选项卡控件是空的,但您可以看到 4 个基本按钮:“取消”、“后退”、“下一步”和“完成”。

创建页面

创建向导的页面,就像您为选项卡控件创建页面一样。 请记住,页面的顺序将是向导中页面的顺序。 对于每个选项卡页面,将文本设置为描述向导步骤的文本。 此文本将在运行时出现在向导的标题中。

 

实现 ActivatePage 方法

在显示页面之前,会自动调用 ActivatePage 方法。 此方法将显示的页面的从零开始的数字作为参数。 开发人员必须实现此方法来完成页面的所有初始化任务。 此方法每页只调用一次。

另一个方法 UnActivatePage 用于停用页面,以允许用户返回并前进时再次调用 ActivatePage

protected override void ActivatePage(int piPageNumber) 
{
  switch (piPageNumber)
  { 
    case 1: 
      DataTable oTable = new DataTable();

      // Do some stuff to init the page
      break; 
  } 
}

实现 ValidatePage 方法

当用户使用“下一步”或“完成”按钮时,将调用 ValidatePage 方法。 当前页面的编号在整数参数中。 如果页面已验证,则此方法必须返回 true。 如果此方法返回 false,“下一步”或“完成”按钮将不执行任何操作,直到验证页面。

运行向导

只需使用 ShowDialog 方法即可显示向导。 它将从第一个选项卡页面开始。 单击“完成”按钮将结束向导,但将为每个剩余页面使用 ActivatePageValidatePage

由于 Wizard 是继承的,您可以自由地自定义基本对话框、按钮和选项卡控件。 请记住,选项卡控件是隐藏的,并且底层选项卡页面会调整大小以填充选项卡控件所使用的空间。

您还可以在对话框的绘图表面上的任何位置添加按钮以用于您自己的目的。

protected override bool ValidatePage(int piPageNumber) 
{ 
  switch (piPageNumber) 
  { 
    case 0: 
      if (textBox1.Text != string.Empty & textBox2.Text != string.Empty) 
        return true; 
      MessageBox.Show(this, "Complete data first"); 
      return false; 
  } 
  return true; 
} 

使用的其他方法

UnActivatePage

当用户使用“后退”按钮停用页面时,将使用此方法,以便再次调用 ActivatePagepiPageNumber 参数是要停用的页面的编号。

AllowBack

调用此方法以允许或禁止向导中的后退按钮。 默认行为是启用后退。

ForwardOffset

可以重载此方法。 此方法递增显示的页面的编号。 默认值为递增 1。 如果要跳过页面,请重载此方法。

PreviousOffset

此方法与 ForwardOffset 具有相同的功能,但默认情况下每次递减显示的页面 1。 重载此方法以获得不同的行为。

历史

2002 年 12 月

  • 首次发布
© . All rights reserved.