天天看點

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

<a href="http://kb.cnblogs.com/page/47339">基于.NET平台的Windows程式設計實戰(一)——前言</a>

<a href="http://kb.cnblogs.com/page/47340">基于.NET平台的Windows程式設計實戰(二)—— 需求分析與資料庫設計</a>

<a href="http://kb.cnblogs.com/page/47342">基于.NET平台的Windows程式設計實戰(四)—— 資料庫操作類的編寫</a>

<a href="http://kb.cnblogs.com/page/47403">基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作</a>

<a href="http://kb.cnblogs.com/page/47404">基于.NET平台的Windows程式設計實戰(六)—— 題目管理功能的實作</a>

OK!下載下傳了DockPanel控件後,我們将其(即WeifenLuo.WinFormsUI.Docking.dll檔案)COPY到前面建立的QuestionnaireSystem項目中的bin檔案夾中,并添加到項目的引用中去,方法如下:右擊項目名稱或右擊“引用”-à“添加引用……”,在彈出的對話框中選擇浏覽頁籤,并找到剛才COPY到項目中的WeifenLuo.WinFormsUI.Docking.dll檔案,點“确定”即可,如下圖5-1所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

圖5-1

DockPanel引入成功後,我們便可以将其做為放到工具箱中像其它控件一樣使用了,下面我們将其添加到工具箱:在左邊工具箱下面的空白處右擊-à“選擇項”-à在彈出的對話框中點選“浏覽”并找到COPY到項目中的WeifenLuo.WinFormsUI.Docking.dll并打開,之後如下圖5-2所示,再點選“确定”,即可發現左邊的工具箱下面多了個DockPanel控件,這表示添加成功了。

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

圖5-2

打開之前我們建立的主視窗MainFrom,并把剛才添加到工具箱的DockPanel控件拉到其界面的空白處,将其Name屬性設為dockPanel,并點選如下圖5-3所示的“在父容器中停靠”,使其停靠到父容器中。

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

圖5-3

好!打住!主視窗MainFrom的設定先到這裡,後面我們再接着設定。

下面我們先來建立一個母視窗吧,以便之後各視窗繼承。方法:右擊項目名-à“添加”-à“Windows窗體”,在彈出的對話框中進入“SurveryWin”,點“确定”即可,如下圖5-4所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

圖5-4

并設定如下屬性:

BackColor:White

Icon:設定成項目檔案夾Images中的logo.ico圖檔

Text:設為空,也可以不設

之後,往窗體中拉入一個ContextMenuStrip控件,将其Name設為” CMenuStrip”,并在其第一個子項目上輸入“關閉”,如下圖5-5所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

圖5-5

之後,在“關閉”上輕按兩下,進入代碼編輯器,将其代碼改寫成如下所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

Code

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.Collections.Generic;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.ComponentModel;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.Data;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.Drawing;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.Text;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.Windows.Forms;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using WeifenLuo.WinFormsUI.Docking;//引入第三方開源控件DockPanel類庫

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

namespace LJ_QuestionnaireSystem

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

{

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

//将這裡的預設繼承From改成DockContent,以使其繼承于第三方控件的DockContent類

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

    public partial class SurveryWin : DockContent 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        public SurveryWin()

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            InitializeComponent();

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        }

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

/**//// 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 以便使用者右擊視窗标題時進行關閉目前視窗

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void 關閉ToolStripMenuItem_Click(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            this.Close();//關閉目前視窗

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

    }

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

}

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

到這裡,母視窗算是建立好了,下面就讓我們分别來建立問卷添加、問卷編輯、預覽問卷、問卷管理四個視窗,依次命名為SurveyAdd、SurveyModify、SurveyPreview、SurveyManage,(建立方法同上面的母視窗的建立一樣,在此以及以後的課程中将不再多說),并都使其繼承于SurveyWin母視窗,繼承的方法也與上面一樣,将對應類後面繼承的From改成SurveyWin即可,下面以SurveyAdd視窗為例進行講解說明:

原來為:

public partial class SurveyAdd :From

現在改成:

public partial class SurveyAdd :SurveryWin

之後,往SurveyAdd視窗中拉入相應的控件,并設定成如下圖5-6所示,具體的屬性設定請下載下傳下面的本課程源碼進行檢視:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

圖5-6

    其對應的代碼改成如下所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

using System.Windows.Forms; 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

    public partial class SurveyAdd :SurveryWin

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        public SurveyAdd()

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            BindDataSurvey();//綁定問卷清單

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        DbOperate dboperate = new DbOperate();//執行個體化一個資料庫操作對象,用于操作資料

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /**//// 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 添加問卷

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void SAddBtn_Click(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            string SName = SNameText.Text.Trim();//擷取輸入的問卷名

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            string isExistSv = "Select Count(id) From Lj_Survey Where Survey_Name='" + SName + "'";

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            string SPople = SPopleText.Text.Trim();//擷取輸入的發起者

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            int OutCount = Convert.ToInt32(OutCountTxt.Text.Trim());//擷取輸入的發放份數 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            DateTime dtime = SDTimePicker.Value;//擷取發放時間

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            string sql = "Insert into Lj_Survey (survey_Name,survey_Sponsor,survey_OutCount,survey_DateTime) ";

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            sql += " values('" + SName + "','" + SPople + "'," + OutCount + ",'" + dtime.ToShortDateString() + "')";

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            if (SName == "" || SPople == "")//判斷是否輸入了問卷名及發起者,如果沒有,則提示

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                MessageBox.Show("請輸入問卷名稱或發起者!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            }

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            else if (dboperate.ExcuteScrSql(isExistSv) &gt; 0)//判斷輸入的問卷是否已經存在,如存在,則提示

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                //MessageBox.Show("已存在此問卷,請重新輸入問卷名!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                IsExistSLab.Visible = true;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            else

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                IsExistSLab.Visible = false;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                if (Convert.ToInt32(dboperate.ExcuteIntSql(sql)) &gt; 0) //如果執行成功,則提示成功,反之提示失敗

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    if (MessageBox.Show("添加成功!請重新整理清單!是否繼續添加?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                        SurveyCancel();//清空所填資料

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                        SListBox.Items.Clear();//清空綁定的問卷項

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                        BindDataSurvey();//重新綁定問卷

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    }

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    else

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                        this.Close(); //關閉目前視窗

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                }

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                else

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    MessageBox.Show("添加失敗!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void SCancelBtn_Click(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            SurveyCancel();//清空所填資料

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 綁定問卷清單

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void BindDataSurvey()

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            string surveySql = "Select Survey_Name From Lj_Survey";//查詢問卷的SQL語句

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            DataTable sdt = dboperate.GetDataTable(surveySql);//擷取問卷資料表

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            if (sdt.Rows.Count &gt; 0) //如果問卷存在,則執行如下操作

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                Object[] items = new object[sdt.Rows.Count];//執行個體化一個對象數組,用于存放讀出的問卷名

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                for (int i = 0; i &lt; sdt.Rows.Count; i++) //循環讀出問卷名

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    items[i] = (i + 1) + "." + sdt.Rows[i][0].ToString();

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                SListBox.Items.AddRange(items);//将問卷名綁定到SlistBox控件上

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 清空所填資料

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void SurveyCancel()

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            SNameText.Text = "";

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            SPopleText.Text = "";

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            OutCountTxt.Text = "0"; 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void SNameText_MouseLeave(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            //查詢輸入的問卷名是否已經存在,如果存在,則給出提示

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            if (dboperate.ExcuteScrSql(isExistSv) &gt; 0)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

以上的代碼在這裡就不用再進行講解了吧,上面的注釋已經寫的很清楚了^_^

至于其它三個視窗的設定,與上面的大同小異,就不一一列出來了,請大家自行下載下傳下面的本課程源碼進行對照設定吧。

建立好各視窗後,讓我們再回到主視窗MainFrom中來進行相對應的關聯設定吧!

先在MianFrom中引入DockPanel,如下所示:

using WeifenLuo.WinFormsUI.Docking;

再分别給主菜單 “問卷”下面的子選項以及工具欄中的:“添加問卷”與“問卷管理” 添加Click事件及ItemClick事件,并寫一個用來查找已打開視窗的方法FindDocument(string text),用來判斷哪些視窗已經打開了,哪些視窗還沒有打開,具體代碼如下所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 在dockPanel中查找已經打開的視窗

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 傳入的視窗标題

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 傳回的視窗

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private IDockContent FindDocument(string text)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                foreach (Form form in MdiChildren)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    if (form.Text == text)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                        return form as IDockContent;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                return null;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                foreach (IDockContent content in dockPanel.Documents)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                    if (content.DockHandler.TabText == text)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                        return content;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void SNTStripMenuItem_Click(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            SurveyAdd sadd = new SurveyAdd();

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            sadd.ShowDialog();

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 問卷管理

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void SToolStripMenuItem_Click(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

         //判斷問卷管理視窗是否已經打開了,如果沒有打開,則打開,否則将将焦點移到問卷管理視窗上

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            if (FindDocument("問卷管理") == null)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                SurveyManage sm = new SurveyManage();

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                sm.Show(dockPanel);

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                Form f = FindDocument("問卷管理") as Form;

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                f.Focus();

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        /// 工具菜單

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

        private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            if (e.ClickedItem == SMaTooScriptBtn)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                SToolStripMenuItem_Click(null, null); 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

            else if (e.ClickedItem == SAddToolScriptBtn)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                SNTStripMenuItem_Click(null, null); 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

最後,我們修改一下主視窗的Load事件,以便啟動系統時能打開問卷管理視窗,代碼如下所示:

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

private void MainForm_Load(object sender, EventArgs e)

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

{  

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作
艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作

                sm.Show(this.dockPanel); 

艾偉:基于.NET平台的Windows程式設計實戰(五)—— 問卷管理功能的實作