桌面程序開發入門(WinForm with C#)


1、使用Visual Studio 2013創建新項目

2、創建一個主窗體和4個子窗體

3、創建一個數據庫、一個表、一個存儲過程

4、在配置文件里添加數據庫連接字符串

5、真正的編碼工作。


第一步:創建新項目,一張圖片抵一萬字!看圖說話,呵呵。。

第二步:創建4個子窗體,名稱分別是formCommandProc.cs、formDataAdapterProc.cs、formXMLCreate.cs、formXMLRead.cs。

三、創建一個數據庫、一個表、一個存儲過程。打開MS SQL Server Management Studio執行下面的全部語句。

CREATE DATABASE TestDB
GO
USE TestDB
GO
CREATE TABLE Student
    (
      SID INT IDENTITY(1, 1)
              NOT NULL ,
      SName NVARCHAR(50) NOT NULL ,
      Sex NVARCHAR(2) NOT NULL ,
      Area NVARCHAR(20) NOT NULL ,
      Email NVARCHAR(50) NOT NULL
    )
ON  [PRIMARY]
GO
INSERT  INTO dbo.Student
        ( SName, Sex, Area, Email )
VALUES  ( N'風花雪月', N'', N'北京', N'abc@qq.com' ),
        ( N'泡椒田雞', N'', N'上海', N'abcd@qq.com' ),
        ( N'紅燈酒綠', N'', N'天津', N'abc@qq.com' );
GO
CREATE PROCEDURE getStudents @p_SID INT
AS
    BEGIN
        SET NOCOUNT ON;
        IF NOT EXISTS ( SELECT  SID
                        FROM    dbo.Student
                        WHERE   SID = @p_SID )
            PRINT 'The student does not exists.'
        ELSE
            SELECT  SID ,
                    SName ,
                    Sex ,
                    Area ,
                    Email
            FROM    dbo.Student
            WHERE   SID = @p_SID
    END
GO
--測試--
--EXEC dbo.getStudents @p_SID = 2 -- int
-->2    泡椒田雞    女    上海    abcd@qq.com

四、在程序配置文件中添加數據庫連接字符串,這里是Windows集成,所以沒有看到用戶名和密碼的屬性。添加完后,在代碼里就可以通過TestDBConnectionString這個字符串連接數據庫了!

     

五、開始設計窗體和寫代碼(這些步驟比較繁瑣,所以再細分幾個步驟,這樣比較清晰)

5.1)設計主窗體

      1.在創建新項目的時候,系統會默認創建一個名為Form1.cs的主窗體,現在把它更名為FormMain.cs
     
2.在工具欄拖動MenuStrip控件到主窗體,主菜單橫向有3項,分別是:存儲過程、XML、退出。存儲過程包括:使用Command 和 使用DataAdapter; XML包括:創建XML和讀取XML; 具體設置參照下表:

(Name)屬性 Text屬性 單擊事件處理程序  
procedureToolStripMenuItem 存儲過程  
useCommandToolStripMenuItem  使用Command useCommandToolStripMenuItem_Click  
useDataAdapterToolStripMenuItem 使用DataAdapter useDataAdapterToolStripMenuItem_Click  
xmlToolStripMenuItem XML  
createXMLToolStripMenuItem 創建XML createXMLToolStripMenuItem_Click  
readXMLToolStripMenuItem  讀取XML  readXMLToolStripMenuItem_Click  
exitToolStripMenuItem 退出 exitToolStripMenuItem_Click  
       

      3.選中主窗體,在屬性窗口修改IsMdiContainer為True,這樣就把這個普通的窗體變成了父窗體。如圖:

      4.添加4個事件的處理程序和一個退出程序事件,程序的功能是實例化4個窗體,並指定自己的父窗體,代碼沒什么可講的,都一個德行。

private void useCommandToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formCommandProc form = new formCommandProc();
            form.MdiParent = this;
            form.Show();
        }

        private void useDataAdapterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formDataAdapterProc form = new formDataAdapterProc();
            form.MdiParent = this;
            form.Show();
        }

        private void createXMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formXMLCreate form = new formXMLCreate();
            form.MdiParent = this;
            form.Show();
        }

        private void readXMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formXMLRead form = new formXMLRead();
            form.MdiParent = this;
            form.Show();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

到目前位置,程序基本都可以運行起來了,只不過沒具體干什么,先看看運行起來的樣子,沒點擊一個菜單項都會創建一個子窗體,如圖:

5.接下來就是要設計子窗體的樣式和功能了。

打開formCommandProc設計模式界面,安照下表屬性添加相關控件:

(Name)屬性 Text屬性 控件類型  單擊事件
formCommandProc 使用Command對象執行存儲過程 System.Windows.Forms.Form
 label1  學號: System.Windows.Forms.Label  無
 tbxSID  無 System.Windows.Forms.TextBox  
 btnGet  查找 System.Windows.Forms.Button  btnGet_Click
 tbxGetStudent  無(Multiline屬性為True)表示多行 System.Windows.Forms.TextBox  

按鈕單擊事件處理程序btnGet_Click:我把整個文件的代碼都放上來了,重點是按鈕點擊事件!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Procedure
{
    public partial class formCommandProc : Form
    {
        public formCommandProc()
        {
            InitializeComponent();
        }

        private void btnGet_Click(object sender, EventArgs e)
        {
            try
            {
                //接受到的學號文本類型轉換為整型int
                Convert.ToInt32(tbxSID.Text);
            }
            catch
            {
                tbxGetStudent.Text += "The student ID does not exists.";
                tbxGetStudent.Text += "\r\n";
                return;
            }

            //這句要引用System.Configuration.dll
            string strConnect = System.Configuration.ConfigurationManager.ConnectionStrings["TestDBConnectionString"].ToString();
            //這句需要添加 using System.Data.SqlClient;
            SqlConnection objConnect = new SqlConnection(strConnect);

            SqlCommand objCommand = new SqlCommand("getStudents", objConnect);
            objCommand.Parameters.Add("@p_SID", SqlDbType.Int);
            objCommand.Parameters["@p_SID"].Value = tbxSID.Text;
            objCommand.CommandType = CommandType.StoredProcedure;
            try
            {
                if (objConnect.State == ConnectionState.Closed)
                {
                    objConnect.Open();
                }
                SqlDataReader objDataReader = objCommand.ExecuteReader();
                if (objDataReader.HasRows ==false)
                {
                    tbxGetStudent.Text += "The student does not exists.";
                    tbxGetStudent.Text += "\r\n";
                }
                else
                {
                    while (objDataReader.Read())
                    {
                        tbxGetStudent.Text += objDataReader.GetValue(0).ToString() + "\t";
                        tbxGetStudent.Text += objDataReader.GetValue(1).ToString() + "\t";
                        tbxGetStudent.Text += objDataReader.GetValue(2).ToString() + "\t";
                        tbxGetStudent.Text += objDataReader.GetValue(3).ToString() + "\t";
                        tbxGetStudent.Text += "\r\n";
                    }
                }
                objDataReader.Close();
            }
            catch(Exception exp)
            {
                tbxGetStudent.Text += exp.Message;
                tbxGetStudent.Text += "\r\n";
            }
            finally
            {
                if(objConnect.State == ConnectionState.Open)
                {
                    objConnect.Close();
                }
            }

        }
    }
}

現在試運行一下程序,應該可以從數據庫里讀取數據了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM