精华内容
下载资源
问答
  • Microsoft Visual Studio 2008/...它是包含 MDI 窗口的窗体,MDI 窗口是用户与 MDI 应用程序在其中进行交互的窗口。在 Windows 窗体设计器中以及以编程方式创建 MDI 父窗体都很容易。在设计时创建 MDI 父窗...

    Microsoft Visual Studio 2008/.NET Framework 3.5

    Windows 窗体编程

    如何:创建 MDI 父窗体

    多文档界面 (MDI) 应用程序的基础是 MDI 父窗体。它是包含 MDI 子窗口的窗体,MDI 子窗口是用户与 MDI 应用程序在其中进行交互的子窗口。在

    Windows 窗体设计器中以及以编程方式创建 MDI 父窗体都很容易。

    在设计时创建 MDI 父窗体

      创建 Windows 应用程序项目。有关更多信息,请参见如何:创建 Windows 应用程序项目。

      “属性”窗口中,将 IsMDIContainer 属性设置为“true”。

      这将该窗体指定为子窗口的 MDI 容器。

            注意

            当在“属性”窗口中设置属性时,如果愿意,也可将 WindowState 属性设置为“Maximized”,因为当父窗体最大化时操作 MDI

            子窗口最为容易。另请注意,MDI 父窗体的边缘将采用系统颜色(在 Windows 系统控制面板中设置),而不是采用您使用

            Control.BackColor 属性设置的背景色。

     

      “MainMenu”组件从“工具箱”拖到窗体上。创建一个“Text”属性设置为“文件(&F)”的顶级菜单项,且带有名为“新建(&N)”和“关闭(&C)”的子菜单项。再创建一个名为“窗口(&W)”的顶级菜单项。

     

      第一个菜单将在运行时创建并隐藏菜单项,而第二个菜单将跟踪打开的 MDI 子窗口。此时,您已创建了一个 MDI 父窗口。

       F5 运行应用程序。有关如何创建在 MDI 父窗体内运行的 MDI 子窗口的信息,请参见如何:创建 MDI 子窗体。

    请参见

    任务

    如何:创建 MDI 子窗体

    如何:确定活动的 MDI 子窗体

    如何:将数据发送到活动的 MDI 子窗体

    如何:排列 MDI 子窗体

     

    其他资源

    多文档界面 (MDI) 应用程序

     

     

    Visual Studio 开发中心

          主页技术资源库学习下载支持社区产品信息

     

    Web 开发

        技术文章

    MSDN 请稍候MSDN Library 请稍候开发工具和语言 请稍候Visual Studio 2005 Visual Studio 文档 基于Windows 的应用程序、组件和服务 请稍候创建基于 Windows 的应用程序Windows 窗体 增强 Windows 窗体应用程序 多文档界面 (MDI) 应用程序 请稍候 如何:创建 MDI 子窗体语言筛选器 : 全部 Visual Basic

     

    C#

     

    C++

     

    J#

     

    JScript

     

    XAML

    This page is specific to

    Microsoft Visual Studio 2005/.NET Framework 2.0

     

     

    Other versions are also available for the following:

      .NET Framework 3.0

      Microsoft Visual Studio 2008/.NET Framework 3.5

    Windows 窗体编程

     

     

     

    如何:创建 MDI 子窗体

    MDI 子窗体是多文档界面 (MDI) 应用程序的必要元素,因为这些窗体是用户交互的中心。

    在下面的过程中,将创建显示 RichTextBox 控件的 MDI 子窗体,该子窗体类似于大多数字处理应用程序。将 System.Windows.Forms

    控件替换为其他控件(如 DataGridView 控件或混合控件)使您得以创建各种可能的 MDI 子窗口(而且进一步扩展为 MDI 应用程序)。

          注意

          显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见

          Visual Studio 设置。

     

    创建 MDI 子窗体

      创建菜单结构中包含顶级菜单项“文件”和“窗口”及菜单项“新建”和“关闭”的 MDI 父窗体。有关创建 MDI 父窗体的更多信息,请参见如何:创建 MDI

      父窗体。

      “属性”窗口顶部的下拉列表中,选择与“窗口(&W)”菜单项对应的菜单项,然后将 MdiList 属性设置为“true”。

      这将使“窗口”菜单能够维护打开的 MDI 子窗口的列表(活动子窗口旁有一个复选标记)。

      “解决方案资源管理器”中右击项目,指向“添加”,然后选择“添加新项”。

      此窗体将作为 MDI 子窗体的模板。

            注意

            在此步骤中创建的 MDI 子窗体是标准的 Windows 窗体。因此,它具有 Opacity

            属性,该属性允许控制窗体的透明度。但是,Opacity 属性旨在用于顶级窗口。不要将其与 MDI 子窗体同时使用,否则可能会引起绘制问题。

     

      “添加新项”对话框中,选择“Windows 窗体”(在 Visual Basic 或 Visual C# 中)或从“模板”窗格中选择“Windows

      窗体应用程序 (.NET)”(在 Visual C++ 中)。在“名称”框中,命名窗体 Form2。单击“打开”按钮将该窗体添加到项目中。

      “Windows 窗体设计器”打开,其中显示 Form2。

      将一个“RichTextBox”控件从“工具箱”中拖到窗体上。

      “属性”窗口中,将 Anchor 属性设置为“Top, Left”,并将 Dock 属性设置为“Fill”。

      这导致即使调整 MDI 子窗体的大小,RichTextBox 控件也会完全填充该窗体的区域。

      “新建”菜单项创建 Click 事件处理程序。有关创建事件处理程序的更多信息,请参见如何:使用设计器创建事件处理程序。

      插入与下面的代码相似的代码,以便在用户单击“新建”菜单项时创建新的 MDI 子窗体。

            注意

            在下面的示例中,事件处理程序处理 MenuItem2 的 Click 事件。请注意,您的“新建”菜单项可能不是

            MenuItem2,这取决于应用程序结构的具体情况。

      Visual Basic 复制代码

    Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

       Dim NewMDIChild As New Form2()

       'Set the Parent Form of the Child window.

       NewMDIChild.MdiParent = Me

       'Display the new form.

       NewMDIChild.Show()

    End Sub

     

     

      C# 复制代码

    protected void MDIChildNew_Click(object sender, System.EventArgs e){

       Form2 newMDIChild = new Form2();

       // Set the Parent Form of the Child window.

       newMDIChild.MdiParent = this;

       // Display the new form.

       newMDIChild.Show();

    }

     

     

      C++ 复制代码

    private:

       void menuItem2_Click(System::Object ^ sender,

          System::EventArgs ^ e)

       {

          Form2^ newMDIChild = gcnew Form2();

          // Set the Parent Form of the Child window.

          newMDIChild->MdiParent = this;

          // Display the new form.

          newMDIChild->Show();

       }

     

       Visual C++ 中,将下面的 #include 指令添加到 Form1.h 的顶部:

      C++ 复制代码

    #include "Form2.h"

     

       F5 运行应用程序。请注意,通过从“文件”菜单中选择“新建”,可创建新的 MDI 子窗体,该子窗体在“窗口”菜单中被跟踪。

            注意

             MDI 子窗体有一个 MainMenu 组件(通常带有菜单项的菜单结构),而且它在有 MainMenu 组件(通常带有菜单项的菜单结构)的

            MDI 父窗体中打开时,如果设置了 MergeType 属性(或 MergeOrder 属性),这些菜单项就会自动合并。将两个 MainMenu

            组件的 MergeType 属性和子窗体的所有菜单项设置为 MergeItems。另外,设置 MergeOrder

            属性,以便这两个菜单的菜单项按所需顺序显示。此外请记住,关闭 MDI 父窗体时,每个 MDI 子窗体先引发一个 Closing 事件,再引发

            MDI 父窗体的 Closing 事件。取消 MDI 子窗体的 Closing 事件不能防止引发 MDI 父窗体的 Closing 事件,但是

            MDI 父窗体的 Closing 事件的 CancelEventArgs 参数将被设置为 true。通过将 CancelEventArgs

            参数设置为 false 可以强制 MDI 父窗体和所有 MDI 子窗体关闭。

     

     

    请参见

    任务

    如何:创建 MDI 父窗体

    如何:确定活动的 MDI 子窗体

    如何:将数据发送到活动的 MDI 子窗体

    如何:排列 MDI 子窗体

     

    其他资源

    多文档界面 (MDI) 应用程序

     

    如何:确定活动的 MDI 子窗体语言筛选器 : 全部 Visual Basic

     

    C#

     

    C++

     

    J#

     

    JScript

     

    XAML

    This page is specific to

    Microsoft Visual Studio 2005/.NET Framework 2.0

     

     

    Other versions are also available for the following:

      .NET Framework 3.0

      Microsoft Visual Studio 2008/.NET Framework 3.5

    Windows 窗体编程

    如何:确定活动的 MDI 子窗体

    有时需要提供一个在控件上操作的命令,而该控件在当前活动的子窗体上具有焦点。例如,假设要将子窗体文本框中的选定文本复制到剪贴板。可以创建这样一个过程:使用标准“编辑”菜单上“复制”菜单项的

    Click 事件将选定的文本复制到剪贴板。

    因为一个 MDI 应用程序可以有同一个子窗体的多个实例,因此该过程需要知道使用哪个窗体。若要指定正确的窗体,请使用 ActiveMdiChild

    属性,该属性返回具有焦点的或最近活动的子窗体。

    当窗体上有数个控件时,还需要指定哪个控件是活动的。与 ActiveMdiChild 属性一样,ActiveControl

    属性返回活动子窗体中具有焦点的控件。下面的过程阐释了可以从子窗体菜单、MDI 窗体菜单或工具栏按钮调用的复制过程。

    确定活动的 MDI 子窗体(将它的文本复制到剪贴板)

      在方法中,将活动子窗体的活动控件的文本复制到剪贴板。

            注意

            此示例假定有一个 MDI 父窗体 (Form1),其中包含一个或多个含有 RichTextBox 控件的 MDI

            子窗口。有关更多信息,请参见创建 MDI 父窗体。

      Visual Basic 复制代码

    Public Sub mniCopy_Click(ByVal sender As Object, _

       ByVal e As System.EventArgs) Handles mniCopy.Click

     

       ' Determine the active child form.

       Dim activeChild As Form = Me.ActiveMDIChild

     

       ' If there is an active child form, find the active control, which

       ' in this example should be a RichTextBox.

       If (Not activeChild Is Nothing) Then

          Try

             Dim theBox As RichTextBox = _

             Ctype(activeChild.ActiveControl, RichTextBox)

             If (Not theBox Is Nothing) Then

                ' Put selected text on Clipboard.

                Clipboard.SetDataObject(theBox.SelectedText)

             End If

          Catch

             MessageBox.Show("You need to select a RichTextBox.")

          End Try

       End If

    End Sub

     

      C# 复制代码

    protected void mniCopy_Click (object sender, System.EventArgs e)

    {

       // Determine the active child form.

       Form activeChild = this.ActiveMdiChild;

     

       // If there is an active child form, find the active control, which

       // in this example should be a RichTextBox.

       if (activeChild != null)

       {  

          try

          {

             RichTextBox theBox = (RichTextBox)activeChild.ActiveControl;

             if (theBox != null)

             {

                // Put the selected text on the Clipboard.

                Clipboard.SetDataObject(theBox.SelectedText);

                

             }

          }

          catch

          {

             MessageBox.Show("You need to select a RichTextBox.");

          }

       }

    }

     

      J# 复制代码

    private void menuItem5_Click(System.Object sender, System.EventArgs e)

    {

       // Determine the active child form.

       Form activeChild = this.get_ActiveMdiChild();

          

       // If there is an active child form, find the active control, which

       // in this example should be a RichTextBox.

       if ( activeChild  != null  )

       {

          try

          {

             RichTextBox theBox = ((RichTextBox)(activeChild.get_ActiveControl()));

             if ( theBox  != null  )

             {

                // Create a new instance of the DataObject interface.

                IDataObject data = Clipboard.GetDataObject();

                // If the data is text, then set the text of the

                // RichTextBox to the text in the clipboard.

                if (data.GetDataPresent(DataFormats.Text))

                {

                   theBox.set_SelectedText(data.GetData(DataFormats.Text).ToString());

                }

             }

          }

          catch(System.Exception exp)

          {

             

             MessageBox.Show("You need to select a RichTextBox.");

          }

       }

    }

     

     

    请参见

    任务

    如何:创建 MDI 父窗体

    如何:创建 MDI 子窗体

    如何:将数据发送到活动的 MDI 子窗体

    如何:排列 MDI 子窗体

     

    其他资源

    多文档界面 (MDI) 应用程序

    展开全文
  • 创建结合使用关联窗体和启动窗体的基本顺序工作流。 关联窗体和启动窗体都是 ASPX 窗体,在 SharePoint 管理员首次关联工作流(关联窗体)时以及在用户启动工作流(启动窗体)时,可利用这些窗体将参数添加到工作流...

    创建 SharePoint 顺序工作流项目

     

    首先,在 Visual Studio 中创建一个顺序工作流项目。 顺序工作流是一系列步骤,这些步骤按顺序执行,直到最后一项活动完成。 在此过程中,您将创建一个应用于 SharePoint 中的“共享文档”列表的顺序工作流。 利用此工作流的向导,您可以将此工作流与网站或列表定义关联,并可以确定工作流的启动时间。

     

       1. 通过指向文件菜单上的新建并单击新建项目,显示新建项目对话框。

     

       2. 展开“Visual C#”下的“SharePoint”节点,然后单击“2010”

     

       3. 在模板窗格中选择顺序工作流

     

       4. 在名称框中,键入名称,然后单击确定

     

          这将显示“SharePoint 自定义向导

     

       5. 在要使用哪个本地网站进行调试?”页中,单击下一步以接受默认网站。

     

          此步骤还会将解决方案的信任级别设置为场解决方案(工作流项目的唯一可用选项)。

     

       6. 在指定用于调试的工作流名称页上,接受默认名称(“* - Workflow1”)。 保留默认工作流模板类型值(列表工作流)。 单击下一步

     

       7. 在是否希望 Visual Studio 在调试会话中自动关联工作流?”页中,清除自动关联工作流模板的框(如果此框已选中)。

          利用此步骤,您可以稍后手动将工作流与显示关联窗体的“共享文档”列表关联。

     

       8. 单击完成

     

    将关联窗体添加到工作流

     

       接下来,创建一个 .ASPX 关联窗体,当 SharePoint 管理员首次将工作流与文档库或列表相关联时,将显示此窗体。

     

       1. 单击解决方案资源管理器中的“Workflow1”节点。

     

       2. 单击项目菜单上的添加新项以显示添加新项对话框。

     

       3. 在该对话框树视图中,展开“Visual C#”,再展开“SharePoint”节点,然后单击“2010”

     

       4. 在模板列表中,选择工作流关联窗体

     

    1

      

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

       5. 在名称文本框中,键入 Workflow1AssociationForm.aspx。

     

       6. 单击添加按钮将该窗体添加到项目中。

     

    设计关联窗体并对其进行编码

     

      在此过程中,通过在关联窗体中添加控件和代码来引入功能。

     

      1. 在关联窗体 (Workflow1AssociationForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。

     

       2. 紧接在此内容元素中的第一行后面添加以下代码,以创建一个用于提示输入费用审批限额 (AutoApproveLimit) 的标签和文本框:

    <asp:Label ID="lblAutoApproveLimit" Text="提交审批的限额:" runat="server" />
    <asp:TextBox ID="AutoApproveLimit" runat="server" />

      3. 展开解决方案资源管理器中的“Workflow1AssociationForm.aspx”文件以显示其从属文件。

     

      4. 右击 Workflow1AssociationForm.aspx 文件并选择查看代码

     

      5. 将 GetAssociationData 方法替换为:

         private string GetAssociationData()
         {
             return this.AutoApproveLimit.Text;
         }

    将启动窗体添加到工作流

       接下来,创建在用户针对文档库或者列表运行工作流时显示的启动窗体。

     

    创建启动窗体

       1. 单击解决方案资源管理器中的“Workflow1”节点。

     

      2. 单击项目菜单上的添加新项以显示添加新项对话框。

     

      3. 在该对话框树视图中,展开“Visual C#”,再展开“SharePoint”节点,然后单击“2010”

     

      4. 在模板列表中,选择工作流启动窗体

     

    12

      5. 在名称文本框中,键入Workflow1InitiationForm.aspx。

     

      6. 单击添加按钮将该窗体添加到项目中。

     

    设计启动窗体并对其进行编码

    对启动窗体进行编码

       1. 在启动窗体 (Workflow1InitiationForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。

     

      2. 紧接在此内容元素中的第一行后面添加以下代码,以创建一个显示已在关联窗体中输入的费用审批限额 (AutoApproveLimit) 的标签和文本框,以及另一个提示输入费用总额 (ExpenseTotal) 的标签和文本框:

    <asp:Label ID="lblAutoApproveLimit" Text="提交审批的限额:" runat="server" />
    <asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" />
    <br /><br />
    <asp:Label ID="lblExpenseTotal" Text="费用总额:" runat="server" />
    <asp:TextBox ID="ExpenseTotal" runat="server" />
    <br /><br />

      3. 展开解决方案资源管理器中的“Workflow1InitiationForm.aspx”文件以显示其从属文件。

     

      4. 右击 Workflow1InitiationForm.aspx 文件并选择查看代码

     

      5. 将 Page_Load 方法替换为以下示例:

    protected void Page_Load(object sender, EventArgs e)
    {
        InitializeParams();
        this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData;
    }

       6. 将 GetInitiationData 方法替换为以下示例:

    // This method is called when the user clicks the button to start the workflow.
    private string GetInitiationData()
    {
        // TODO: Return a string that contains the initiation data that 
        // will be passed to the workflow.Typically, this is in XML format.
        return this.ExpenseTotal.Text;
    }

    自定义工作流

       通过双击项目中的 Workflow1,在工作流设计器中显示工作流。

     

       1. 在工具箱中,展开“Windows Workflow v3.0”节点,并找到“IfElse”活动。

     

    2

     

       2. 通过将此活动拖动到设计器中并将其放置在工作流中的“onWorkflowActivated1”活动下方,将此活动添加到工作流中。 这将在设计器中创建一个称作 IfElseActivity1 的活动。

     

    3

     

       3. 在工具箱中,展开“SharePoint 工作流节点并找到“CreateTask”活动。

     

    4

     

       4. 通过将此活动拖放到 IfElseActivity1 中的两个 Activity 拖放至此区域之一,将此活动添加到工作流中。

     

    5

     

       5. 在属性窗口中,为 CorrelationToken 属性输入属性值 taskToken。

     

       6. 通过单击 CorrelationToken 属性旁边的加号来展开此属性。

     

       7. 单击 OwnerActivityName 子属性上的下拉箭头并选择 Workflow1。

     

    6

     

       8. 单击 TaskId 属性,然后单击省略号 按钮以显示绑定属性对话框。

     

       9. 单击绑定到新成员选项卡,选择创建字段,然后单击确定

     

    13

     

       10. 单击 TaskProperties 属性,然后单击省略号按钮以显示绑定属性对话框。

     

       11. 单击绑定到新成员选项卡,选择创建字段,然后单击确定

     

    14

     

       12. 在工具箱中,展开“SharePoint 工作流节点并找到“LogToHistoryListActivity”活动。

     

       13. 通过将此活动拖放到 IfElseActivity1 中的另一个 Activity 拖放至此区域,将此活动添加到工作流中。

     

    9

     

    在工作流中添加代码

      接下来,在工作流中添加代码以引入功能。

     

      1. 在工作流设计器中双击“createTask1”活动,为 MethodInvoking 事件生成一个空方法。

     

      2. 将 MethodInvoking 方法替换为:

    private void createTask1_MethodInvoking(object sender, EventArgs e)
    {
         createTask1_TaskId1 = Guid.NewGuid();
         createTask1_TaskProperties1.AssignedTo = " CONTOSO//administrator";
         createTask1_TaskProperties1.Description = "请批准报销费用";
         createTask1_TaskProperties1.Title = "审批报销费用";
    }

      3. 在 MethodInvoking 方法下添加以下示例:

    private void checkApprovalNeeded(object sender, ConditionalEventArgs e)
    {
        bool approval = false;
        if (Convert.ToInt32(workflowProperties.InitiationData) > 
                  Convert.ToInt32(workflowProperties.AssociationData))
        {
             approval = true;
        }
        e.Result = approval;
    } 

      4. 在工作流设计器中,单击“ifElseBranchActivity1”活动。

     

      5. 在属性窗口中,单击“Condition”属性的下拉箭头并选择 Code Condition。

     

      6. 通过单击“Condition”属性旁边的加号来展开此属性,然后将其值设置为 checkApprovalNeeded。

     

    10

     

      7. 在工作流设计器中,右击“logToHistoryListActivity1”活动并选择生成处理程序,以便为 MethodInvoking 事件生成空方法。

     

    11

     

      8. 将 MethodInvoking 代码替换为下面的内容:

    private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e)
    {
          this.logToHistoryListActivity1.HistoryOutcome = "批准的报销: " + workflowProperties.InitiationData;
     }

      9. 按 F5 调试程序。

     

    将工作流关联到文档库或列表

      接下来,通过将工作流与 SharePoint 网站上的共享文档列表相关联来显示工作流关联窗体。

     

    关联工作流

      1. 在快速启动栏上单击共享文档

     

      2. 单击库工具功能区选项卡上的,然后单击库设置功能区按钮。

     

      3. 在权限和管理部分中,单击工作流设置链接,然后单击工作流页上的添加工作流链接

     

    16

     

      4. 在工作流设置页中的顶部列表中,选择“* - Workflow1”模板。

     

    15

     

      5. 在下一个字段中,键入 Workflow,然后单击下一步按钮。

     

      这会将工作流与共享文档列表相关联并显示工作流关联窗体。

     

      6. 在“提交审批的限额”文本框中,键入 1200,然后单击“完成按钮。

     

    17

     

    启动工作流

      然后将工作流关联到共享文档列表中的某个文档以显示工作流启动窗体。

     

      1. 在 SharePoint 页上,单击主页按钮,然后通过在快速启动栏上单击共享文档链接来显示 SharePoint 网站上的共享文档列表。

     

      2. 通过单击页顶部的库工具选项卡上的文档链接,并单击功能区上的上载文档按钮,将新文档上载到共享文档列表中。

     

      3. 将鼠标指针指向已上载文档以显示下拉箭头。 单击下拉箭头并选择工作流

     

    18

     

      这将显示工作流启动窗体。 (请注意,“提交审批的限额”框中显示的值是只读的,因为此值是先前在关联窗体中输入的。)

     

      5. 在“费用总额”文本框中键入 1600,然后单击启动工作流

     

    19

     

    这将再次显示共享文档列表。 将带有“已完成”值的名为“workflow”的新列添加到工作流刚启动的项中。

     

    20

     

      6. 单击已上载文档旁边的下拉箭头,然后单击工作流以显示工作流状态页。 单击已完成工作流下的值已完成。 这将在任务部分下方列出任务。

     

    21

     

      7. 单击任务的标题以显示其任务详细信息。

     

    22

     

      8. 返回到共享文档列表并使用同一文档或其他文档重新启动工作流。

     

      9. 在启动页上输入一个小于或等于关联页上输入的金额 (1200) 的金额。

     

       在执行此操作时,会在历史记录列表中创建一个项而不是任务。 该项显示在工作流状态页的工作流历史记录部分中。 请注意历史记录事件的结果列中的消息。 它包含 logToHistoryListActivity1.MethodInvoking 事件中输入的文本,该文本包括已自动审批的金额。

     

    23

     

    说明:此教程只来说明,工作流关联窗体和启动窗体如何使用,内容简单。较复杂的工作流和比较符合实际业务流程的工作流开发会在以后的教程中涉及。

     

     

    展开全文
  • access窗体设计:创建子窗体

    万次阅读 2014-03-20 19:42:05
    同时创建窗体与子窗体 在“数据库”窗口中,单击“对象”下的“窗体” 。 单击“数据库”窗口工具栏上的“新建”按钮。 在“新建窗体”对话框中,单击“窗体向导”。 如果向导未启动 这可能是...

    如果要将子窗体链接到主窗体,执行该过程前应确保已与基础记录源建立关联。

    当窗体显示在数据透视表视图或数据透视图视图中时,不能向其中添加子窗体。

    隐藏同时创建窗体与子窗体

    1. “数据库”窗口中,单击“对象”下的“窗体”按钮图像 。
    2. 单击“数据库”窗口工具栏上的“新建”按钮。
    3. 在“新建窗体”对话框中,单击“窗体向导”。

    隐藏如果向导未启动

    这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。有关沙盒模式的详细信息,请参阅 Office Online 文章关于Microsoft Jet Expression Service 沙盒模式

    1. 在第一个向导对话框中,从列表中选择表或查询。例如,若要创建显示子窗体中每一类别产品的“类别”窗体,请选定“类别”表(位于一对多关系的“一”方)。

     注释   先选定哪个表或查询都可以。

    1. 双击要从该表或查询中包括的字段。
    2. 在同一向导对话框中,从列表中选择另一个表或查询。如果还要用同一示例,则选择“产品”表(位于一对多关系的“多”方)。
    3. 双击要从该表或查询中包括的字段。
    4. 如果在启动向导之前已正确设置了关系,则单击“下一步”时,向导会询问以哪一个表或查询来查看。如果还要用同一示例来创建“类别”窗体,则单击“按类别”。
    5. 在同一向导对话框中,选中“带有子窗体的窗体”选项。
    6. 按照其余向导对话框中的指示进行操作。单击“完成”后,Microsoft Access 将同时创建两个窗体,一个是主窗体子窗体控件,另一个则是子窗体。

    隐藏创建子窗体并将其添加到另一个窗体中

    1. “设计”视图中打开要向其中添加子窗体的窗体。
    2. 确保已按下了工具箱中的“控件向导”工具 按钮图像 。
    3. 单击工具箱中的“子窗体/子报表”工具 按钮图像 。
    4. 在窗体上单击要放置子窗体的位置。
    5. 根据向导对话框中的指导完成各步骤。

    隐藏如果向导未启动

    这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。有关沙盒模式的详细信息,请参阅 Office Online 文章关于Microsoft Jet Expression Service 沙盒模式

    1. 单击“完成”后,Microsoft Access 将在窗体中添加一个子窗体控件,并为子窗体创建一个单独的窗体。

    隐藏将窗体添加到另一个窗体中以创建带有子窗体的窗体

    1. “设计”视图中,打开要用作主窗体的窗体。主窗体通常是基于一对多关系中“一”方的表或查询的窗体。
    2. 确保已按下了工具箱中的“控件向导”工具 图像按钮 。
    3. 按 F11 切换到“数据库”窗口
    4. 从“数据库”窗口中将相应的窗体、表或查询拖到主窗体。

    隐藏创建带有两个子窗体的窗体 

    主窗体与第一个子窗体有一对多关系,第一个子窗体又与第二个子窗体有一对多关系,主窗体中含有两个子窗体控件

    1. “数据库”窗口中,单击“对象”下的“窗体”按钮图像 。
    2. 单击“数据库”窗口工具栏上的“新建”。
    3. 在“新建窗体”对话框中,双击列表中的“窗体向导”。

    隐藏如果向导未启动

    这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。有关沙盒模式的详细信息,请参阅 Office Online 文章关于Microsoft Jet Expression Service 沙盒模式

    1. 在第一个向导对话框中,选择用于主窗体的表或查询。例如,假定要创建带有两个子窗体的“客户”窗体,其中一个子窗体为“订单”子窗体,另一个为“订单明细”子窗体,此时请选择“客户”表(第一个一对多关系中的“一”方)。

     注释   无论先选定哪个表或查询都可以。

    1. 双击要从该表或查询中包括的字段。
    2. 在同一个向导对话框中,选择用于第一个子窗体的表或查询。使用同一示例,请选择“订单”表(第一个一对多关系中的“多”方),然后双击要从该表或查询中包括的字段。
    3. 在同一个向导对话框中,选择用于第二个子窗体的表或查询。使用同一示例,请选择“订单明细”表(在第二个一对多关系中的“多”方),然后双击要从该表或查询中包括的字段。
    4. 如果在启动向导前已经正确设置了表的关系,则单击“下一步”后,向导会询问要按哪个表或查询来查看。使用同一示例,要创建“客户”窗体,请单击“按客户”选项。
    5. 在同一向导对话框中,选中“带有子窗体的窗体”选项。
    6. 按照其他向导对话框的指导进行操作。单击“完成”后,Microsoft Access 将创建一个带有两个子窗体控件的主窗体,还将创建另外两个窗体,每个子窗体各一个。

     注释 

    • 用向导创建带有两个子窗体的窗体时,Microsoft Access 将通过给第一个子窗体的“当前”属性附加一个事件过程来同步子窗体。如果要同步同一窗体上更多的子窗体,可以复制和修改这个事件过程。若要查看这个事件过程,请在“设计”视图中打开第一个子窗体,双击窗体选择器,然后单击“当前”属性旁边的“生成”按钮 按钮图像 。
    • “罗斯文”示例数据库中“客户订单”窗体就是一个带有两个子窗体的窗体。若要查看该窗体,请指向“帮助”菜单上的“示例数据库”,单击“‘罗斯文’示例数据库”或“‘罗斯文’示例 Access 项目”,然后在“设计”视图中打开“客户订单”窗体。 

    隐藏创建带有内嵌子窗体的窗体

    主窗体与第一个子窗体有一对多关系,第一个子窗体又与第二个子窗体有一对多关系,第二个子窗体内嵌在第一个子窗体中。

    1. 创建一个带有子窗体的窗体。

    隐藏操作方法:

    1. “数据库”窗口中,单击“对象”下的“窗体”按钮图像 。
    2. 单击“数据库”窗口工具栏上的“新建”按钮。
    3. 在“新建窗体”对话框中,单击“窗体向导”。

    隐藏如果向导未启动

    这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。有关沙盒模式的详细信息,请参阅 Office Online 文章关于 Microsoft Jet Expression Service 沙盒模式

    1. 在第一个向导对话框中,从列表中选择表或查询。例如,若要创建显示子窗体中每一类别产品的“类别”窗体,请选定“类别”表(位于一对多关系的“一”方)。

     注释   先选定哪个表或查询都可以。

    1. 双击要从该表或查询中包括的字段。
    2. 在同一向导对话框中,从列表中选择另一个表或查询。如果还要用同一示例,则选择“产品”表(位于一对多关系的“多”方)。
    3. 双击要从该表或查询中包括的字段。
    4. 如果在启动向导之前已正确设置了关系,则单击“下一步”时,向导会询问以哪一个表或查询来查看。如果还要用同一示例来创建“类别”窗体,则单击“按类别”。
    5. 在同一向导对话框中,选中“带有子窗体的窗体”选项。
    6. 按照其余向导对话框中的指示进行操作。单击“完成”后,Microsoft Access 将同时创建两个窗体,一个是主窗体子窗体控件,另一个则是子窗体。

     注释   当向导询问子窗体需要何种版式时,必须选择“表格”(等效于“窗体”视图)。

    1. 在主窗体的“设计”视图中,选择子窗体控件并再次单击控件的内部以选择窗体,就像从“数据库”窗口的“设计”视图中打开子窗体一样。
    2. 执行下列操作之一:
    • 重复第 1 步以通过向导创建第二个子窗体。
    • 将窗体、表或查询从“数据库”窗口中拖到子窗体中。Microsoft Access 将在第一个子窗体内再创建另一个子窗体,并创建子窗体的窗体。
    展开全文
  • 创建透明的窗体并移动它上面的子窗体 ByCorbin Dunn  你也许见过带有透明区域的窗体,并想知道在Delphi里面如何实现。很简单,有几种不同的方法能取得下面的效果:  第一种解决的方法是给窗体添加WS_EX_...

     

    创建透明的窗体并移动它上面的子窗体

    ByCorbin Dunn

        你也许见过带有透明区域的窗体,并想知道在Delphi里面如何实现。很简单,有几种不同的方法能取得下面的效果:

        第一种解决的方法是给窗体添加WS_EX_TRANSPARENT风格。这种方法可行,但是达不到期望的全部效果,Microsoft建议对生命短暂的模式窗体使用WS_EX_TRANSPARENT风格。

        第二种解决方法是使用Windows 2000新的分层窗口的功能。然而,这样会限制你的应用程序只能运行在Windows2000

        这篇文章选择了第三种方法。您可以调用Windows APISetWindowRgn来指定窗口的哪些区域是你想要看到的,难点之一是创建这个区域,它包含所有你想看到的所有子窗体。解决的办法是枚举窗体上所有可见的控件,把这些控件占的小区域合并成一个大区域。下面就是实现的代码:

     

    procedure TForm1.SetRegions;
    var
      I: Integer;
      RgnAll, RgnCtrl: HRGN;
    begin
      RgnAll := 0;
      for I := 0 to ControlCount - 1 do
      begin
        with Controls[I] do
        begin
          if Visible then
          begin
            // Create a region for each given visible control
            RgnCtrl := CreateRectRgn(Left, Top, Left + Width, Top + Height);
            // Combine the region with all previous ones, if available
            if (RgnCtrl <> 0) and (RgnAll <> 0) then
            begin
              CombineRgn(RgnAll, RgnAll, RgnCtrl, RGN_OR);
              DeleteObject(RgnCtrl);
            end
            else
              RgnAll := RgnCtrl; // This is the first region being created
          end;
        end;
      end;
      // Now, set the RgnAll as what we see for the Window
      if RgnAll <> 0 then
      begin
        (*
          From SetWindowRgn in the help file:
           "After a successful call to SetWindowRgn,
           the operating system owns the region specified
           by the region handle hRgn. The operating system
           does not make a copy of the region. Thus, you
           should not make any further function calls with
           this region handle. In particular, do not close
           this region handle."
     
           So don't call DeleteObject on RgnAll after using
           it for SetWindowRgn (thanks to Richard Albury for
           pointing this out!) A previous version of this article
           made this mistake.
        *)
        SetWindowRgn(Handle, RgnAll, True);
      end;
    end;

     

        注意我在使用完一个区域后调用了DeleteObject ,不这样做将导致Windows资源泄漏。API CreateRectRgn是创建矩形区域,如果你的形状不同,可以使用CreatePolygonRgn来精确定义窗口或控件的形状。

        移动窗体上的控件时你可能会遇到一个问题。如果编程移动控件(如在OnMouseMove事件里面),控件会超出上面创建的区域;此外,移动的时候也可能无法正确绘制控件。一个简单的解决办法是:移动的同时调用SetRegions,更新窗体的可见区域;并调用Control.Repaint,强制重绘控件。代码如下:

    procedure TForm1.GenericMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      // If the control wasn't moved, then exit right away
      if (X - LastX = 0) and (Y - LastY = 0) then Exit;
      // Move the control
      with (Sender as TControl) do
      begin
        Left := Left + (X - LastX);
        Top := Top + (Y - LastY);
      end;
      SetRegions;
      (Sender as TControl).Repaint;
    end;

        在你的应用程序中添加透明窗体,现在应该不成问题。

    原文来源:http://edn.embarcadero.com/article/26277

     

     

     

    展开全文
  • WPF子窗体

    2019-07-24 09:37:00
    效果: 1. 点击WPF主窗体上的一个按钮,...1. 在WPF项目中,已主窗体MainWindow,再新建子窗体ChildWindow: 2. 在主窗体的按钮单击事件的处理程序中: 1 private void Button2_Click(object sender, Rou...
  • Access数据库窗体设计上,可以在一个已经创建好的窗体里嵌套一个子窗体。这样,这个子窗体能根据主窗体的变化而变化。 比如我建立了一个供应商详情的主窗体,这时想在这个主窗体上能根据每个不同的供应商显示它的...
  • 在主窗体中创建子窗体的方法

    千次阅读 2010-04-14 11:06:00
    子窗体设为child,none,然后再主窗体中以创建动态窗口的方法显示就可以了 mytest *ptr;//子窗口类 ptr=new mytest(); ptr->Create(IDD_MYTEST_DIALOG, this); CRect test; this->GetClientRect(&test); ...
  • 因项目中需要一个手动选择日期时间的控制要求,在网上找了一段日期时间的js代码,此代码在htm或者窗体中都可以正常运行的,但是在带有母版的子窗体中无法正常运行。现子窗体中有一个DropDownList列表框,它的...
  • 最近在做项目的时候,发现MDI父窗体的主菜单的左边,当子窗体最大化的时候,显示了子窗体的图标ICON。以及如果子窗体含有菜单的话,子窗体的菜单会显示再父窗体上。   在网上搜索了好多文章,最后终于发现了解决...
  • WinForm排列MDI子窗体

    2018-02-15 13:41:00
    我们可以通过使用带有MdiLayout枚举的LayoutMdi方法来排列多文档界面父窗体中的子窗体。语法:public void LayoutMdi (MdiLayout value)value:是MdiLayout枚举值之一,用来定义MDI子窗体的布局。MdiLay...
  • Fixwin电子窗体——弹出窗体模板

    千次阅读 2012-01-03 14:15:57
    通过Fixwin电子窗体,设计几种常用的功能模块模版,在开发实际的项目时,采用模板创建相应模块能够节省工作量,并且通过模板建立的系统界面一致性也比较好。 以下是弹出窗体类的模板   模板1:空白窗体 空白...
  • C# 子窗体与父窗体之间几种传值的方式 https://blog.csdn.net/yuekunge/article/details/9171301 C# 委托和事件,简单示例说明问题 https://www.cnblogs.com/hjsstudio/p/9816126.html C#简单实现子窗体向父窗体...
  • 举个例子,将子窗体中TextBox控件的值传给主窗体,两种方法,第一种方法是将子窗体中TextBox控件中的值传给主窗体显示,可以参照我的另一篇文章窗体之间的传值;第二种方法是将在子窗体中调用主窗体的控件,由于...
  • (1)定义一个委托,保证父窗体与子窗体都能拿到 public delegate void ReLoadMain(); (2)子窗体中定义一个委托变量(保证父窗体可以访问到): public ReLoadMain CompleteReturn { get;set; } (3)父窗体...
  • 目前5个窗体 Form1、Form2、Form3、Form4、Form5,其中Form1是主窗体,还有4个是子窗体。我想随便关闭一个子窗体后也连把open状态的子窗体也一起关闭! 这个事件:Form3Closing(object sender, ...
  • 创建窗体

    千次阅读 2010-05-23 00:16:00
    而VC++中提供了丰富的类库,用于创建Windows窗体应用程序。 我们一般可以通过CFreameWnd类中的Create()方法来创建一个窗体,Create()函数的定义如下:BOOL Create(LPCTSTR lpszClassName, LPCTSTR l
  • 在做MDI程序时有时需要子窗体不能重复打开,有时人还需要使子窗体只能在父窗体范围内移动,即不超出父窗体的范围,不出现滚动条! 防止子窗体重复弹出,网上很多类似。使子窗体在父窗体范围内移动,我想到一个...
  • C#的MDI窗体判断子窗体是否已经打开

    千次阅读 2015-03-19 09:36:20
    Mdi窗体的设置: IsMdiContainer 设置为true; 子窗体设置: ///  /// 显示子窗体  ///  ///  private void ShowForm(BaseForm _bt)  {  string name = _bt.Name;  
  • 首先在父窗体中判断该窗体是否已经存在  public static frmBookSelect fbs;  private void tsbBookSelect_Click(object sender, EventArgs e)  {  if (fbs == null) //如果不存在就实例化该窗体并显示
  • 关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow 1,如果弹出窗体(比如SubWindow)仅仅是调用Show方法,并且没有...
  • Fixwin电子窗体——基本信息模板

    千次阅读 2011-12-07 23:25:21
    通过Fixwin电子窗体,设计几种常用的功能模块模版,在开发实际的项目时,采用模板创建相应模块能够节省工作量,并且通过模板建立的系统界面一致性也比较好。 以下是几种基本信息类的模板   模板1:简单的表格 ...
  • WPF子窗体随父窗体移动而移动

    千次阅读 热门讨论 2018-11-22 19:59:06
    窗体 /// &amp;lt;summary&amp;gt; /// 菜单-关于 /// &amp;lt;/summary&amp;gt; /// &amp;lt;param name=&quot;sender&quot;&amp;gt;&amp;lt;/param&amp;gt; ...
  • 我们讨论三种窗体,它们分别是“重叠式窗体”(overlapped window)“弹出式窗体”(popup window) 与“子窗体”(child window)。 窗体风格 1. WS_OVERLAPPED 2. WS_OVERLAPPEDWINDOW 3. WS_POPUP 4. WS_...
  • 创建Windows窗体

    千次阅读 2018-06-10 19:07:23
        开发 游戏的第一步,需要建立窗体。     做出的空白窗体,并没有游戏的绘图系统,只是“建立了一个标准窗体”而已。...标题栏的左边控制菜单的图标,中间显示的是程序的标题。     菜...
  • 创建空白窗体

    2017-11-29 09:56:22
    package uuu; import java.awt.*;//awt=Abstract Window Toolkit 抽象窗口工具包(不包含目录下的文件) import java.awt.event.*; //调用事件处理方面的类 ...//直接使用JFrame创建空白窗体 public
  • 所以建窗体的时候就决定试试:没有把主窗体建成MDI窗体,使用的是普通窗体,于是乎,昨天开师徒会的时候就和师傅谈论了这个问题,师傅提出了一点我之前没有注意到的问题:如果不是MDI窗体的话,打开主窗体和子窗体,...
  • 前段时间和别人讨论问题, 他说要在一个不透明的主窗体上, 建立一个透明的子窗体, 在该子窗体上再建立透明的TreeCtrl. 先是将透明的TreeCtrl实现了, MFC : Transparent TreeCtrl from CTreeCtrl 在实现子窗口体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,092
精华内容 10,436
关键字:

如何创建带有子窗体的窗体