首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 開發實用技巧集錦 (第三輯)

     編輯:關於C語言

30. 快速建立 WinForm 安裝程式

  1. 建立基本 WinForm 專案並執行測試
  2. 加入新項目 → 安裝與部署 → 安裝精靈
  3. 連續兩次「下一步」,在「選擇包含的項目輸出」勾選「主要輸出」
  4. 連續兩次「下一步」完成精靈
  5. 建置專案,在輸出目錄找到 Setup.exe、.msi 與 .ini 執行安裝

31. 安裝程式中自動建立 SQL Server 資料表

  1. 加入安裝程式類別 MyInstaller.cs
  2. 在 SSMS 中建立資料表,右鍵「所有工作」→「產生 SQL 指令碼」,移除所有 GO 關鍵字
  3. 將 SQL 腳本 mytable.sql 加入專案,設定「建置動作」為「內嵌資源」
  4. 在 MyInstaller.cs 實作資源讀取與執行邏輯:
    private string GetSql(string name)
    {
        var asm = Assembly.GetExecutingAssembly();
        using var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.{name}");
        using var reader = new StreamReader(stream);
        return reader.ReadToEnd();
    }
    
    private void ExecuteSql(string dbName, string sql)
    {
        using var conn = new SqlConnection("server=myserver;uid=sa;pwd=;database=master");
        using var cmd = new SqlCommand(sql, conn);
        conn.Open();
        conn.ChangeDatabase(dbName);
        cmd.ExecuteNonQuery();
    }
    
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        ExecuteSql("master", "CREATE DATABASE MyDB");
        ExecuteSql("MyDB", GetSql("mytable.sql"));
    }
  5. 建立部署專案 MySetup,加入主要輸出
  6. 在「自訂動作」→「安裝」中加入主要輸出

32. TreeView 顯示父子關係資料庫資料

假設三層結構:a1 (id, name) → a2 (id, parent_id, name) → a3 (id, parent_id, name)

// 填充三個 DataTable 到 DataSet
// 建立 DataRelation: a1-a2 (a1a2), a2-a3 (a2a3)

foreach (DataRow drA1 in ds.Tables["a1"].Rows)
{
    var tn1 = new TreeNode(drA1["name"].ToString());
    treeView1.Nodes.Add(tn1);
    
    foreach (DataRow drA2 in drA1.GetChildRows("a1a2"))
    {
        var tn2 = new TreeNode(drA2["name"].ToString());
        tn1.Nodes.Add(tn2);
        
        foreach (DataRow drA3 in drA2.GetChildRows("a2a3"))
        {
            var tn3 = new TreeNode(drA3["name"].ToString());
            tn2.Nodes.Add(tn3);
        }
    }
}

33. 表單間資料傳遞:委派模式

場景:Form2 的資料傳回 Form1 的 TextBox

Form2 定義委派與事件

public delegate void SendData(object sender);
public SendData sendData;

// 在按鈕點擊事件中
if (sendData != null)
{
    sendData(txtBoxAtForm2);
}
this.Close();

Form1 訂閱並顯示

var form2 = new Form2();
form2.sendData = new Form2.SendData(MyFunction);
form2.ShowDialog();

private void MyFunction(object sender)
{
    textBox1.Text = ((TextBox)sender).Text;
}

此模式實現鬆耦合通訊,Form2 無需知道 Form1 具體實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved