最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?WinForms實現(xiàn)打印監(jiān)聽組件工具

 更新時間:2026年04月13日 09:18:23   作者:碼農剛子  
打印監(jiān)聽組件是一款集成于?Windows?桌面環(huán)境的打印任務管理與監(jiān)控工具,適用于企業(yè)級應用場景,下面我們就來看看C#?WinForms實現(xiàn)打印監(jiān)聽組件工具的具體方法吧,希望對大家有所幫助

一、組件簡介

打印監(jiān)聽組件是一款集成于 Windows 桌面環(huán)境的打印任務管理與監(jiān)控工具,適用于企業(yè)級應用場景。它不僅支持多打印機任務的實時監(jiān)控,還能通過 WebSocket 與外部系統(tǒng)集成,實現(xiàn)自動化打印、任務狀態(tài)反饋、遠程控制等功能。

二、界面功能介紹

1. 主界面與托盤集成

主窗體:采用 WinForms 界面,包含多標簽頁(TabControl),每個標簽頁對應一臺本地打印機,便于分組管理。

托盤圖標:程序最小化后駐留于系統(tǒng)托盤,雙擊可快速還原主界面,支持右鍵菜單操作(如退出、重啟、服務設置等)。

2. 打印機管理

打印機列表:自動檢測本地所有已安裝打印機,支持設置默認打印機、查看打印機屬性。

/// <summary>
/// 綁定本地打印機列表到菜單
/// </summary>
internal void BindPrintersToMenu()
{
    默認打印機ToolStripMenuItem.DropDownItems.Clear();
    // 獲取當前系統(tǒng)默認打印機
    string defaultPrinter = new System.Drawing.Printing.PrinterSettings().PrinterName;

    // 先添加默認打印機(始終第一行)
    var defaultItem = new ToolStripMenuItem(defaultPrinter)
    {
        Checked = true
    };
    defaultItem.Click += (s, e) => SetDefaultPrinterUI(defaultPrinter);
    // 添加“首選項”子菜單
    var prefItem = new ToolStripMenuItem("首選項");
    prefItem.Click += (s, e) => ShowPrinterProperties(defaultPrinter);
    defaultItem.DropDownItems.Add(prefItem);
    默認打印機ToolStripMenuItem.DropDownItems.Add(defaultItem);

    // 再添加其他打印機(排除默認打印機)
    foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
    {
        if (printer == defaultPrinter)
            continue;

        var item = new ToolStripMenuItem(printer)
        {
            Checked = false
        };
        item.Click += (s, e) => SetDefaultPrinterUI(printer);

        var prefItem2 = new ToolStripMenuItem("首選項");
        prefItem2.Click += (s, e) => ShowPrinterProperties(printer);
        item.DropDownItems.Add(prefItem2);

        默認打印機ToolStripMenuItem.DropDownItems.Add(item);
    }

}
 /// <summary>  
 /// UI和系統(tǒng)都設置默認打印機 
 /// </summary>  
 /// <param name="printerName"></param>  
 private void SetDefaultPrinterUI(string printerName)
 {
     foreach (ToolStripMenuItem item in 默認打印機ToolStripMenuItem.DropDownItems)
         item.Checked = item.Text == printerName;

     // 如需設置為系統(tǒng)默認打印機,可調用 Win32 API(可選)  
     SetSystemDefaultPrinter(printerName);
 }
 /// <summary>
/// 顯示打印機首選項對話框
/// </summary>
/// <param name="printerName"></param>
private void ShowPrinterProperties(string printerName)
{
    // 使用rundll32調用打印機屬性對話框
    //string args = $"printui.dll,PrintUIEntry /p /n \"{printerName}\"";
    //?	/e 參數(shù)表示直接打開“首選項”對話框
    string args = $"printui.dll,PrintUIEntry /e /n \"{printerName}\"";
    var psi = new System.Diagnostics.ProcessStartInfo
    {
        FileName = "rundll32.exe",
        Arguments = args,
        UseShellExecute = false,
        CreateNoWindow = true
    };
    try
    {
        System.Diagnostics.Process.Start(psi);
    }
    catch (Exception ex)
    {
        MessageBox.Show("無法打開打印機首選項窗口:" + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

TabControl:每臺打印機一個標簽頁,便于查看和管理各自的打印任務。

 /// <summary>
 /// 綁定本地打印機列表到TabControl
 /// </summary>
 private void BindPrintersToTabControl()
 {
     tabControl1.TabPages.Clear();

     string defaultPrinter = new System.Drawing.Printing.PrinterSettings().PrinterName;
     List<string> printers = new List<string>();

     // 先將默認打印機添加到列表首位
     printers.Add(defaultPrinter);

     // 再添加其他打印機(排除默認打印機)
     foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
     {
         if (printer != defaultPrinter)
             printers.Add(printer);
     }

     foreach (string printer in printers)
     {
         var tabPage = new TabPage(printer);
         // 創(chuàng)建DataGridView
         var dgv = new DataGridView
         {
             Dock = DockStyle.Fill,
             ReadOnly = true,
             AllowUserToAddRows = false,
             AllowUserToDeleteRows = false,
             RowHeadersVisible = false,
             AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
         };

         // 添加列
         dgv.Columns.Add("clientIp", "來源");
         dgv.Columns.Add("taskId", "任務ID");
         dgv.Columns.Add("taskName", "任務名稱");
         dgv.Columns.Add("realName", "模板");
         dgv.Columns.Add("requestTime", "開始時間");
         dgv.Columns.Add("status", "任務狀態(tài)");

         //綁定菜單
         dgv.ContextMenuStrip = dgvContextMenu;
         dgv.MouseDown += Dgv_MouseDown;

         // 創(chuàng)建TextBox
         var txtSearch = new TextBox
         {
             PlaceholderText = "任務ID",
             Width = 120,
             Anchor = AnchorStyles.Left | AnchorStyles.Bottom
         };

         // 創(chuàng)建Button
         var btnSearch = new Button
         {
             Text = "查找",
             Width = 60,
             Anchor = AnchorStyles.Left | AnchorStyles.Bottom
         };

         // 查找事件
         btnSearch.Click += (s, e) =>
         {
             string searchId = txtSearch.Text.Trim();
             bool found = false;
             foreach (DataGridViewRow row in dgv.Rows)
             {
                 if (row.IsNewRow) continue;
                 if (row.Cells["taskId"].Value?.ToString() == searchId)
                 {
                     row.Selected = true;
                     dgv.CurrentCell = row.Cells["taskId"];
                     found = true;
                 }
                 else
                 {
                     row.Selected = false;
                 }
             }
             if (!found)
             {
                 MessageBox.Show("未找到對應任務ID!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
         };

         // 使用Panel布局
         var panel = new Panel
         {
             Dock = DockStyle.Bottom,
             Height = 40
         };
         txtSearch.Location = new Point(10, 8);
         btnSearch.Location = new Point(140, 6);
         panel.Controls.Add(txtSearch);
         panel.Controls.Add(btnSearch);

         tabPage.Controls.Add(panel);
         tabPage.Controls.Add(dgv);
         tabControl1.TabPages.Add(tabPage);
     }
 }

3. 打印任務監(jiān)控

任務列表:每個打印機標簽頁下方為 DataGridView,實時顯示當前打印任務,包括來源、任務ID、任務名稱、模板、開始時間、任務狀態(tài)等信息。

右鍵菜單:支持對單個任務進行“取消打印”、“重新打印”、“刪除記錄”等操作。

任務搜索:支持按任務ID快速定位任務。

4. 其他功能

  • 服務控制:可一鍵啟動/停止 WebSocket 服務,支持與外部系統(tǒng)通信。
  • 模板設計與預覽:集成 FastReport 設計器和預覽器,方便模板維護。

因為FastReport.Net 是需要購買授權的,所以我使用的是FastReport.OpenSource(開源版),開源版功能太少,不能直接從程序內部調用FastReport設計器和預覽器,只能通過啟動本地安裝的.exe來實現(xiàn)。

/// <summary>
/// 設計菜單項點擊事件,啟動 FastReport 設計器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 設計ToolStripMenuItem_Click(object sender, EventArgs e)
{
    string designerPath = GetConfigValue("designer_path");
    string templatePath = GetTemplatePathFromConfig();
    if (string.IsNullOrEmpty(designerPath) || !System.IO.File.Exists(designerPath))
    {
        MessageBox.Show("未找到 FastReport 設計器,請檢查 config.ini 配置!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
    if (!System.IO.File.Exists(templatePath))
    {
        MessageBox.Show("未找到模板文件,請檢查路徑!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
    try
    {
        System.Diagnostics.Process.Start(designerPath, $"\"{templatePath}\"");
    }
    catch (Exception ex)
    {
        MessageBox.Show("啟動 FastReport 設計器失?。? + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
private void 預覽ToolStripMenuItem_Click(object sender, EventArgs e)
{
    string viewerPath = GetConfigValue("viewer_path");
    string templatePath = GetTemplatePathFromConfig();
    if (string.IsNullOrEmpty(viewerPath) || !System.IO.File.Exists(viewerPath))
    {
        MessageBox.Show("未找到 FastReport 預覽器,請檢查 config.ini 配置!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
    if (!System.IO.File.Exists(templatePath))
    {
        MessageBox.Show("未找到模板文件,請檢查路徑!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
    try
    {
        System.Diagnostics.Process.Start(viewerPath, $"\"{templatePath}\"");
    }
    catch (Exception ex)
    {
        MessageBox.Show("啟動 FastReport 預覽器失?。? + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

自動更新:支持在線檢查和自動更新程序版本。

這里使用的是:Autoupdater.NET

幫助與支持:內置開發(fā)者聯(lián)系方式,便于用戶反饋和技術支持。

三、技術要點

1. 打印任務監(jiān)聽與管理

WMI 打印作業(yè)監(jiān)控:通過 System.Management 命名空間,使用 WMI 查詢 Win32_PrintJob,實現(xiàn)對打印隊列的實時監(jiān)控??筛鶕?jù)任務ID或文檔名唯一標識,精確定位和管理打印作業(yè)。

using System.Management;

 /// <summary>
 /// 打印機監(jiān)聽方法實現(xiàn)
 /// </summary>
 /// <param name="printerName"></param>
 /// <param name="taskId"></param>
 private void StartMonitorPrintJob(string printerName, int taskId, string taskName)
 {
     Task.Run(() =>
     {
         try
         {
             string query = $"SELECT * FROM Win32_PrintJob WHERE Name LIKE '%{printerName}%'";
             using (var searcher = new ManagementObjectSearcher(query))
             {
                 while (true)
                 {
                     var jobs = searcher.Get();
                     bool found = false;
                     foreach (ManagementObject job in jobs)
                     {
                         found = true;
                         int JobId = Convert.ToInt32(job["JobId"]);
                         if (JobId == taskId)
                         {
                             // 匹配到本任務,更新狀態(tài)
                             string jobStatus = job["JobStatus"]?.ToString() ?? "";
                             string status = job["Status"]?.ToString() ?? "";
                             string displayStatus = string.IsNullOrEmpty(jobStatus) ? status : jobStatus;
                             UpdateTaskStatusOnUI(printerName, taskName, displayStatus);
                             if (displayStatus.Contains("Printed") || displayStatus.Contains("Completed") || displayStatus.Contains("Deleted"))
                                 return;
                         }
                     }
                     if (!found)
                     {
                         // 作業(yè)已消失,認為已完成
                         UpdateTaskStatusOnUI(printerName, taskName, "已完成");
                         return;
                     }
                     Thread.Sleep(1000); // 1秒輪詢
                 }
             }
         }
         catch (Exception ex)
         {
             UpdateTaskStatusOnUI(printerName, taskName, "狀態(tài)監(jiān)聽失敗");
         }
     });
 }

任務狀態(tài)同步:通過輪詢方式定時查詢打印隊列,自動更新任務狀態(tài)(如“正在打印”、“已完成”、“已取消”等),并在 UI 上實時反饋。

2. 打印任務操作

取消打?。和ㄟ^ WMI 刪除指定打印作業(yè),確保任務被及時從隊列中移除,并同步更新界面狀態(tài)。

 /// <summary>
 /// 取消打印
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void CancelPrint_Click(object sender, EventArgs e)
 {
     var dgv = GetCurrentDgv();
     if (dgv == null) return;
     var row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : null;
     if (row == null) return;
     int taskId = Convert.ToInt32(row.Cells["taskId"].Value);
     string printerName = tabControl1.SelectedTab.Text;
     // 查詢打印隊列,找到文檔名包含 taskId 的作業(yè)
     string query = $"SELECT * FROM Win32_PrintJob WHERE Name LIKE '%{printerName}%'";
     using (var searcher = new System.Management.ManagementObjectSearcher(query))
     {
         foreach (System.Management.ManagementObject job in searcher.Get())
         {
             int JobId = Convert.ToInt32(job["JobId"]);
             if (JobId == taskId)
             {
                 try
                 {
                     job.Delete(); // 刪除打印任務
                     row.Cells["status"].Value = "已取消";
                     MessageBox.Show($"已取消打印任務:{taskId}", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show("取消打印失敗:" + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 }
                 return;
             }
         }
     }
     MessageBox.Show("未找到對應的打印任務,可能已完成或被清除。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }

重新打印:首次打印時將所有參數(shù)(文件路徑、數(shù)據(jù)、模板名等)保存在 DataGridView 行的 Tag 屬性,重新打印時直接復用原始參數(shù),保證打印一致性。

 /// <summary>
 /// 重新打印
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Reprint_Click(object sender, EventArgs e)
 {
     var dgv = GetCurrentDgv();
     if (dgv == null) return;
     var row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : null;
     if (row == null) return;
     if (row.Tag is PrintTaskInfo info)
     {
         // 復用原 taskName,或可選生成新 taskName
         string taskName = row.Cells["taskName"].Value.ToString();
         string status = row.Cells["status"].Value.ToString();
         if (status == "已完成")
             PrintFile(info.FilePath, info.Data, taskName);
     }
     else
     {
         MessageBox.Show("未找到原始打印信息,無法重新打印。", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }

刪除記錄:支持在任務未完成時先刪除打印隊列中的作業(yè),再移除界面記錄,防止“假刪除”導致隊列堆積。

/// <summary>
/// 刪除打印記錄
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DeleteRecord_Click(object sender, EventArgs e)
{
    var dgv = GetCurrentDgv();
    if (dgv == null) return;
    var row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : null;
    if (row == null) return;

    int taskId = Convert.ToInt32(row.Cells["taskId"].Value);
    string status = row.Cells["status"].Value?.ToString();
    string printerName = tabControl1.SelectedTab.Text;
    // 如果未完成,先刪除打印隊列中的任務
    if (status != "已完成" && status != "已取消")
    {
        string query = $"SELECT * FROM Win32_PrintJob WHERE Name LIKE '%{printerName}%'";
        using (var searcher = new System.Management.ManagementObjectSearcher(query))
        {
            foreach (System.Management.ManagementObject job in searcher.Get())
            {
                int JobId = Convert.ToInt32(job["JobId"]);
                if (JobId == taskId)
                {
                    try
                    {
                        job.Delete(); // 刪除打印任務
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("刪除打印任務失?。? + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    break;
                }
            }
        }
    }
    dgv.Rows.Remove(row);
}

3. WebSocket 通信

Fleck 組件集成:使用 Fleck 實現(xiàn) WebSocket 服務端,支持外部系統(tǒng)通過網(wǎng)絡下發(fā)打印任務、查詢狀態(tài)、遠程控制等。

消息協(xié)議設計:采用 JSON 協(xié)議,支持多種命令(如 print、show、ping 等),并能將打印結果、錯誤信息實時反饋給客戶端。

socket.OnMessage = message =>
{
    var msg = message?.Trim().ToLowerInvariant();
    // 處理不同的消息
    if (msg == "ping")
    {
        // 回復 pong
        socket.Send("pong");
    }
    else if (msg == "show")
    {
        // 顯示主窗體
        this.Invoke(() =>
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
            this.ShowInTaskbar = true;
            this.Activate();
        });
    }
    else if (msg != null && msg.TrimStart().StartsWith("{"))
    {
        // 反序列化為 JsonNode 便于動態(tài)訪問
        var json = JsonNode.Parse(msg);
        var cmd = json?["cmd"]?.ToString();
        string requestId = json?["requestid"]?.ToString();
        //處理打印任務
        if (cmd == "print")
        {
            // 取出 printIniInfo 和 data
            var printIniInfo = json["data"]?["printiniinfo"];
            var data = json["data"]?["data"];
            string filePath = printIniInfo?["filepath"]?.ToString();
            string realName = printIniInfo?["realname"]?.ToString();

            // 獲取來源IP和端口
            string clientIp = socket.ConnectionInfo.ClientIpAddress;
            int clientPort = socket.ConnectionInfo.ClientPort;
            string requestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            string status = "作業(yè)正在后臺處理";
            // 獲取當前系統(tǒng)默認打印機
            string printerName = new System.Drawing.Printing.PrinterSettings().PrinterName;
            int taskId = 0;
            // 任務名稱為當前時間
            string taskName = DateTime.Now.ToString("yyyyMMddHHmmssfff");
            // 查找對應TabPage和DataGridView
            this.Invoke(() =>
            {
                foreach (TabPage tab in tabControl1.TabPages)
                {
                    // 支持“(默認)”后綴
                    if (tab.Text.StartsWith(printerName))
                    {
                        var dgv = tab.Controls.OfType<DataGridView>().FirstOrDefault();
                        if (dgv != null)
                        {
                            int rowIndex = dgv.Rows.Add(
                                 $"{clientIp}:{clientPort}", // 來源
                                 taskId,                     // 任務ID
                                 taskName,                   // 任務名稱
                                 realName,                   // 模板
                                 requestTime,                // 開始時間
                                 status                      // 任務狀態(tài)
                             );
                            var row = dgv.Rows[rowIndex];
                            row.Tag = new PrintTaskInfo
                            {
                                FilePath = filePath,
                                Data = data
                            };
                            // 添加后排序
                            dgv.Sort(dgv.Columns["requestTime"], ListSortDirection.Descending);
                        }
                        break;
                    }
                }
            });
            // 調用實際打印方法
            this.Invoke(() => PrintFile(filePath, data, taskName, socket, requestId));

            //監(jiān)聽打印機狀態(tài)
            StartMonitorPrintJob(printerName, taskId, taskName);
        }
        else
        {
            // 處理其他cmd
            Console.WriteLine($"收到未知cmd: {cmd}");
        }
    }
    else
    {
        Console.WriteLine($"收到未知消息: {message}");
    }
};

異常處理與反饋:打印過程中如遇異常(如文件不存在、數(shù)據(jù)格式錯誤等),會捕獲異常并通過 WebSocket 回復詳細錯誤信息,便于外部系統(tǒng)及時處理。

4. 打印文件類型支持

多格式兼容:支持 TXT、圖片(JPG/PNG/BMP/GIF)、PDF、FastReport 模板(FRX)等多種文件類型的打印。

模板數(shù)據(jù)綁定:對于報表類打印,支持將 JSON、DataTable、DataSet 等多種數(shù)據(jù)源動態(tài)綁定到模板,實現(xiàn)靈活的數(shù)據(jù)驅動打印。

5. 用戶體驗優(yōu)化

  • 界面交互友好:采用右鍵菜單、彈窗提示、托盤集成等方式,提升用戶操作便捷性。
  • 錯誤提示與日志:所有關鍵操作均有明確的錯誤提示,便于用戶定位問題;可擴展日志記錄功能,方便后期維護。

四、總結

打印監(jiān)聽組件通過對打印隊列的實時監(jiān)控、任務的精細化管理、與外部系統(tǒng)的高效集成,極大提升了企業(yè)打印自動化和可控性。其靈活的界面、豐富的功能和健壯的技術架構,適用于多種業(yè)務場景,值得在企業(yè)信息化建設中推廣應用。

以上就是C# WinForms實現(xiàn)打印監(jiān)聽組件工具的詳細內容,更多關于C# WinForms打印監(jiān)聽的資料請關注腳本之家其它相關文章!

相關文章

  • vista和win7在windows服務中交互桌面權限問題解決方法:穿透Session 0 隔離

    vista和win7在windows服務中交互桌面權限問題解決方法:穿透Session 0 隔離

    服務(Service)對于大家來說一定不會陌生,它是Windows 操作系統(tǒng)重要的組成部分。我們可以把服務想像成一種特殊的應用程序,它隨系統(tǒng)的“開啟~關閉”而“開始~停止”其工作內容,在這期間無需任何用戶參與
    2016-04-04
  • C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫的方法

    C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫的方法,通過StreamReader類里的ReadLine()方法實現(xiàn)逐行讀取的功能,是非常實用的技巧,需要的朋友可以參考下
    2014-12-12
  • WinForm實現(xiàn)窗體最大化并遮蓋任務欄的方法

    WinForm實現(xiàn)窗體最大化并遮蓋任務欄的方法

    這篇文章主要介紹了WinForm實現(xiàn)窗體最大化并遮蓋任務欄的方法,涉及C#實現(xiàn)WinForm窗體全屏顯示的實現(xiàn)及調用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#對Word文檔的創(chuàng)建、插入表格、設置樣式等操作實例

    C#對Word文檔的創(chuàng)建、插入表格、設置樣式等操作實例

    今天小編就為大家分享一篇C#對Word文檔的創(chuàng)建、插入表格、設置樣式等操作實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 深入理解C#委托delegate的使用

    深入理解C#委托delegate的使用

    本文主要介紹了C#委托delegate的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C#中時間類的使用方法詳解

    C#中時間類的使用方法詳解

    這篇文章主要介紹C#中的時間類,文中主要介紹了DateTime類,TimeSpan類,DateTimeOffset類及靜態(tài)類的封裝,通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • C#實現(xiàn)利用Linq操作Xml文件

    C#實現(xiàn)利用Linq操作Xml文件

    這篇文章主要為大家詳細介紹了C#如何利用Linq實現(xiàn)操作Xml文件,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • 詳解C#編程中一維數(shù)組與多維數(shù)組的使用

    詳解C#編程中一維數(shù)組與多維數(shù)組的使用

    這篇文章主要介紹了詳解C#編程中一維數(shù)組與多維數(shù)組的使用,包括數(shù)組初始化等基礎知識的講解,需要的朋友可以參考下
    2016-01-01
  • C#類的多態(tài)性詳解

    C#類的多態(tài)性詳解

    這篇文章主要為大家詳細介紹了C#類的多態(tài)性,主要有兩種:一是編譯時的多態(tài)性,二是運行時的多態(tài)性,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • WPF使用WrapPanel實現(xiàn)虛擬化效果

    WPF使用WrapPanel實現(xiàn)虛擬化效果

    這篇文章主要為大家詳細介紹了如何利用WPF WrapPanel實現(xiàn)虛擬化效果,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-09-09

最新評論

佛山市| 焉耆| 乳山市| 河东区| 镶黄旗| 古交市| 花莲县| 方正县| 泽州县| 遵义县| 莱州市| 五台县| 广东省| 调兵山市| 扎赉特旗| 甘谷县| 株洲市| 翁牛特旗| 浪卡子县| 云霄县| 寻甸| 泸溪县| 岚皋县| 西安市| 静乐县| 钟祥市| 雅安市| 康乐县| 安达市| 乐平市| 沈丘县| 汝州市| 汉川市| 延津县| 揭西县| 高碑店市| 鄱阳县| 新兴县| 德化县| 原阳县| 金山区|