Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中为Windows窗体创建向导#_C#_Winforms_Wizard - Fatal编程技术网

C# 在C中为Windows窗体创建向导#

C# 在C中为Windows窗体创建向导#,c#,winforms,wizard,C#,Winforms,Wizard,我是在C#.Net中为Windows窗体应用程序创建向导的新手。所以我对向导的创建一无所知。请给我一些关于创建多个向导的想法 尊敬的ravi,您需要创建自己的,以满足您自己的偏好。提示您创建一个名为“frmWizard”的基本表单,然后所有向导窗口都将从中继承。您应该将公共对象或向导对象放在基类上,并根据需要在派生类上修改\覆盖它们。有很多方法可以做到这一点。为每个向导步骤创建表单是可能的,但非常尴尬。而且很难看,当用户改变步骤时,会有很多闪烁。使每个步骤都成为一个UserControl,只需在

我是在C#.Net中为Windows窗体应用程序创建向导的新手。所以我对向导的创建一无所知。请给我一些关于创建多个向导的想法


尊敬的ravi,您需要创建自己的,以满足您自己的偏好。提示您创建一个名为“frmWizard”的基本表单,然后所有向导窗口都将从中继承。您应该将公共对象或向导对象放在基类上,并根据需要在派生类上修改\覆盖它们。

有很多方法可以做到这一点。为每个向导步骤创建表单是可能的,但非常尴尬。而且很难看,当用户改变步骤时,会有很多闪烁。使每个步骤都成为一个UserControl,只需在表单的Controls集合中切换它们。或使其中一个可见=对于每个步骤为true。UC设计往往会变得复杂,您必须为每个UI项添加公共属性

最简单、最简单的方法是使用TabControl。在设计器中工作得很好,因为它允许您在设计时切换选项卡,并在每个选项卡上放置控件。切换步骤很简单,只需更改SelectedIndex属性即可。唯一重要的是在运行时隐藏选项卡。通过处理Windows消息仍然很容易做到。向表单中添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖到窗体上

using System;
using System.Windows.Forms;

class WizardPages : TabControl {
  protected override void WndProc(ref Message m) {
    // Hide tabs by trapping the TCM_ADJUSTRECT message
    if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
    else base.WndProc(ref m);
  }
}

+51:现在你可以使用一个选项卡控件,隐藏选项卡…并使用选项卡索引在选项卡页面之间切换。。。???“我会用这个……比管理重叠的面板要好得多。”汉斯回答得好,汉斯!我只是库里斯:这是否完全隐藏了选项卡,用户无法点击,或者通过点击TAB键或其他方式激活它们?@Sean87点击CTRL+TAB实际上会在选项卡上移动pages@The选项卡的菜单设置只是将
TabStop
设置为false@Hans我尝试了这个解决方案,但在大多数情况下效果都很好。问题是它在运行时不会删除tabcontrol边框的和框架。有可能吗?其他钥匙呢?上下翻页?还是左右箭头键?您无法添加它们,因为您无法在该控件的子文本框中移动。如果您处理
Ctrl
+
Tab
Ctrl
+
Shift
+
Tab
也不要忘记它们的等价项
Ctrl
+
PgUp
Ctrl
+
+
PgDn
。后者在许多情况下更占主导地位,
Ctrl
+
Tab
Ctrl
+
Shift
+
Tab
由内部控件执行,例如多行输入框。@Misiu上面限制的键在子控件中仍然工作良好(我刚刚测试过)@miroxlav-我没有检查,我编写了一个简单的控件,它并没有扩展TabControl。我使用过这篇文章:将基本表单(此处建议)与自定义选项卡控件(在其他答案中描述)结合起来非常有用。创建向导的基础是有用的,尤其是当应用程序有多个向导时。这有助于避免复制粘贴编码的恐惧。我通常在基类中实现的有用方法有
OnPageEntered
OnPageExited
AllowNext
AllowBack
,等等。
class WizardPages : TabControl
{
    protected override void WndProc(ref Message m)
    {
        // Hide tabs by trapping the TCM_ADJUSTRECT message
        if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
        else base.WndProc(ref m);
    }        

    protected override void OnKeyDown(KeyEventArgs ke)
    {
        // Block Ctrl+Tab and Ctrl+Shift+Tab hotkeys
        if (ke.Control && ke.KeyCode == Keys.Tab) 
            return;
        base.OnKeyDown(ke);
    }
}