VSTO(C#)Excel開發6:與窗體交互

初級代碼游戲的專欄介紹與文章目錄-CSDN博客

我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。

這些代碼大部分以Linux為目標但部分代碼是純C++的,可以在任何平臺上使用。

源碼指引:github源碼指引_初級代碼游戲的博客-CSDN博客


? ? ? ? 前一篇VSTO(C#)Excel開發5:調整表格到一頁-CSDN博客

? ? ? ? 本篇來研究一下與窗體交互,也就是與普通的C#窗體代碼協作。當我們能與普通的C#代碼協作我們就可以說可以把原來的程序和Excel整合在一起了。

目錄

一、創建一個窗體

二、修改功能區按鈕代碼來顯示窗體

三、效果

四、C#form窗體的基本操作

五、在窗體上顯示內容


一、創建一個窗體

? ? ? ? 項目上右鍵-添加-新建項:

? ? ? ? 選“窗體(Windows窗體)”,名稱可以改可以不改,無關緊要。?我用的名字是“FormFitToOnePage.cs”,生成的類就是FormFitToOnePage。

二、修改功能區按鈕代碼來顯示窗體

? ? ? ? 功能區按鈕我們已經很熟悉了,新建或者直接在原來的上面改都行。在功能區的代碼里添加如下代碼:

? ? ? ? 功能區的類名我改成了“RibbonFitToOnePage”。第一個紅框的代碼可以讓開發工具自動添加,第二個紅框是在類里面添加窗體變量,第三個紅框是在功能區加載時創建窗體對象,第四個紅框就是在點擊按鈕時把窗體顯示出來。

? ? ? ? 為了方便你驗證(Ctrl-C、Ctrl-V),上面幾句代碼如下:

using System.Windows.Forms;
using Microsoft.Office.Tools.Ribbon;namespace ctExcelTools
{public partial class RibbonFitToOnePage{private FormFitToOnePage formFitToOnePage;private void RibbonFitToOnePage_Load(object sender, RibbonUIEventArgs e){formFitToOnePage = new FormFitToOnePage();}private void button1_Click(object sender, RibbonControlEventArgs e){formFitToOnePage.TopMost = true;formFitToOnePage.Show();

三、效果

? ? ? ? 添這幾句代碼應該沒什么風險,編譯運行點擊按鈕:

? ? ? ? 窗體能夠顯示,窗體的內容我們后面再說。

? ? ? ? 任務欄上是這樣的:

? ? ? ? 也就是說通過功能區顯示的窗體和Excel是可以來回切換的。

四、C#form窗體的基本操作

? ? ? ? C#窗體比MFC方便,但也有些奇怪,form.Show()其實是無模式對話框,點右上角紅叉關閉的話對話框就沒有了,不能重復顯示,為此需要處理FormClosing事件,在事件里寫如下代碼:

		private void FormFitToOnePage_FormClosing(object sender, FormClosingEventArgs e){e.Cancel = true;this.Hide();}

? ? ? ? ?先取消關閉事件,然后隱藏窗體,這樣就能在用Show來顯示了。但是第二次顯示的窗體不會顯示在頂層,因此需要在顯示之前設置為頂層:

			formFitToOnePage.TopMost = true;formFitToOnePage.Show();

? ? ? ? 但是這樣一來永遠在頂層,會遮住我們要看的內容,所以又要在顯示之后取消頂層,這樣才能把窗口放到后面去,我在按鈕事件的最后取消了窗體的頂層顯示。

五、在窗體上顯示內容

? ? ? ? 窗體上增加一個文本框(這不是本主題的內容),因為我們的程序功能很簡單,所以把文本框對象改成public就可以在功能區代碼里直接使用了:

? ? ? ? 添了一個textbox,改了一下Anchor屬性,四邊綁定,也就是隨著窗體大小伸縮,設置為多行和只讀。

? ? ? ? 紅框那一句是窗體設計器添加的,但是是“private”,改成“public”就可以了。?

? ? ? ? 功能區按鈕的事件代碼如下:

		private void button1_Click(object sender, RibbonControlEventArgs e){formFitToOnePage.TopMost = true;formFitToOnePage.Show();string str = "開始操作。。。。。。\r\n";try{Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;Range usedRange = worksheet.UsedRange;str += " UsedRange:" + usedRange.Address + "\r\n";str += " UsedRange.Column:" + usedRange.Column + "\r\n";str += " UsedRange.Columns.Count:" + usedRange.Columns.Count + "\r\n";str += " UsedRange.Row:" + usedRange.Row + "\n";str += " UsedRange.Rows.Count:" + usedRange.Rows.Count + "\r\n";str += " PrintArea:" + worksheet.PageSetup.PrintArea + "\r\n";str += " PaperSize:" + worksheet.PageSetup.PaperSize.ToString() + "\r\n";str += " ChartSize:" + worksheet.PageSetup.ChartSize + "\r\n";str += " Orientation:" + worksheet.PageSetup.Orientation.ToString() + "\r\n";str += " TopMargin:" + worksheet.PageSetup.TopMargin + "\r\n";str += " BottomMargin:" + worksheet.PageSetup.BottomMargin + "\r\n";str += " LeftMargin:" + worksheet.PageSetup.LeftMargin + "\r\n";str += " RightMargin:" + worksheet.PageSetup.RightMargin + "\r\n";str += " Pages:" + worksheet.PageSetup.Pages.Count + "\r\n";//worksheet.PageSetup.Zoom = false;//設置為false才能Fit//worksheet.PageSetup.FitToPagesWide = 1;double originalTotalWidth = 0;double originalTotalHeigh = 0;for (int i = 0; i < usedRange.Columns.Count; ++i){Range colum = worksheet.Columns[usedRange.Column + i];originalTotalWidth += colum.ColumnWidth;}for (int i = 0; i < usedRange.Rows.Count; ++i){Range row = worksheet.Rows[usedRange.Row + i];originalTotalHeigh += row.RowHeight;}str += " originalTotalWidth:" + originalTotalWidth + "\r\n";str += " originalTotalHeigh:" + originalTotalHeigh + "\r\n";str += "操作成功完成\n";}catch (Exception ex){formFitToOnePage.textBox_Info.Text += ex.ToString();}formFitToOnePage.textBox_Info.Text += str;formFitToOnePage.TopMost = false;}

? ? ? ? 就是把上一篇顯示的內容輸出到窗體的文本框里了。

? ? ? ? 現在可以切換窗口、關閉窗口、點擊按鈕重新顯示,注意,窗口的文本是追加,會越來越多,也能因此確認窗口只是隱藏了。


下一篇VSTO(C#)Excel開發7:自定義任務窗格-CSDN博客?


(這里是文檔結束)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72253.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Node.js與VUE安裝

目錄 Win下載安裝 Mac下載安裝 Win與Mac配置檢查是否安裝成功切換淘寶NPM庫檢查鏡像配置是否生效設置 npm 全局環境目錄&#xff08;避免權限問題&#xff09;WinMac VUE CLI安裝安裝驗證打開vue面板 Vue腳手架npm init vuelatest、npm create vuelatestvue create、vue ui Win…

快速集成1688商品API:10分鐘實現跨境選品數據自動化

要快速集成 1688 商品 API 以實現跨境選品數據自動化&#xff0c;可參考以下步驟&#xff1a; 注冊并申請 API 權限&#xff1a;注冊賬號創建應用并申請所需的 API 權限&#xff0c;如商品搜索、篩選、獲取詳情等相關權限。獲取 API Key 和 Secret&#xff1a;在應用管理頁面獲…

解決 MySQL 遷移到達夢報錯 “無效的列名” 的問題

在數據庫遷移的過程中&#xff0c;常常會遇到各種各樣的問題。本文將聚焦于從源庫 MySQL&#xff08;大小寫不敏感&#xff09;遷移到目標庫達夢&#xff08;大小寫敏感&#xff09;時&#xff0c;出現的創建索引報錯 “無效的列名” 這一問題&#xff0c;使用SQLark工具如何避…

工程化與框架系列(31)--前端依賴管理實踐

前端依賴管理實踐 &#x1f4e6; 引言 前端依賴管理是現代Web開發中的重要環節。本文將深入探討前端依賴管理的最佳實踐&#xff0c;包括包管理工具、版本控制、依賴分析和優化等方面&#xff0c;幫助開發者更好地管理項目依賴。 依賴管理概述 前端依賴管理主要包括以下方面…

C/C++都有哪些開源的Web框架?

CppCMS CppCMS是一個采用C語言開發的高性能Web框架&#xff0c;通過模版元編程方式實現了在編譯期檢查RESTful路由系統&#xff0c;支持傳統的MVC模式和多種語言混合開發模式。 CppCMS最厲害的功能是WebSocket&#xff0c;10萬連接在內存中長期保存占用的大小不超過600MB&…

數據結構——環形數組

環形數組 start 指向第一個有效元素的索引&#xff0c;end 指向最后一個有效元素的下一個位置索引。 注意&#xff1a; start是閉區間&#xff0c;先左移后賦值&#xff0c;先賦值(null)后右移&#xff1b;end是開區間&#xff0c;先賦值再右移&#xff0c;先左移再賦值(null…

大數據學習(59)-DataX執行機制

&&大數據學習&& &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 承認自己的無知&#xff0c;乃是開啟智慧的大門 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一下博主哦&#x1f91…

云原生性能測試全解析:如何構建高效穩定的現代應用?

一、引言 隨著云計算技術的快速發展&#xff0c;云原生&#xff08;Cloud Native&#xff09;架構成為現代應用開發的主流模式。云原生應用通常采用微服務架構、容器化部署&#xff0c;并利用 Kubernetes&#xff08;K8s&#xff09;等編排工具進行管理。然而&#xff0c;云原…

golang的Map

Map集合 概述 Map 是一種無序的鍵值對的集合。 Map 最重要的一點是通過 key 來快速檢索數據&#xff0c;key 類似于索引&#xff0c;指向數據的值。 Map 是一種集合&#xff0c;所以我們可以像迭代數組和切片那樣迭代它。不過&#xff0c;Map 是無序的&#xff0c;遍歷 Map…

USB數據采集卡 Labview采集卡 32路AD模擬量采集 DAQ卡

今天給大家介紹阿爾泰科技的一款多功能數據采集卡USB3150/1/2/5/6 。 該板卡提供 32RSE / NRSE 通道或 16 通道 DIFF 模 擬量輸入&#xff1b;4 通道模擬量同步輸出&#xff1b;16 路可編程 I/O&#xff1b;2 路計數器。 USB3150/1/2/5/6 的主要應用場合為&#xff1a;電子產品…

K8s 1.27.1 實戰系列(十)PV PVC

一、核心概念與關系 ?1、PV(Persistent Volume)? PV 是集群中的持久化存儲資源,由管理員預先創建并配置,獨立于 Pod 生命周期。它抽象了底層存儲(如 NFS、云存儲等),定義存儲容量、訪問模式(如 ReadWriteOnce)、回收策略(Retain/Delete/Recycle)等屬性。例如,一…

基于DeepSeek的智能數據分析和自動化處理系統:引領BI行業新變革

近期&#xff0c;一款基于DeepSeek API的智能數據分析和自動化處理系統橫空出世&#xff0c;以其強大的功能和靈活的可擴展性&#xff0c;為BI行業帶來了顛覆性的變革。 該系統支持多類型數據分析&#xff0c;包括文本 、指標和日志等。在文本分析方面&#xff0c;它能夠提取關…

圖形學面試題總結

圖形學面試題總結 文章目錄 圖形學面試題總結Opengl 與 Vulkan1、OpenGL的渲染管線有哪些主要階段&#xff1f;分別做什么&#xff1f;2、OpenGL中的VAO、VBO和EBO分別是什么&#xff1f;為什么需要它們&#xff1f;3、細分著色器與幾何著色器是什么4、Vulkan與Opengl的區別是什…

Vue 系列之:路由

vue-router 組件 router-link 功能&#xff1a;用于導航&#xff0c;即渲染一個鏈接&#xff0c;當點擊時&#xff0c;導航到由 to 屬性指定的 URL。 示例&#xff1a;<router-link to"/home">Home</router-link> 它會渲染為一個 <a> 標簽&…

通過mybatis的攔截器對SQL進行打標

1、背景 在我們開發的過程中&#xff0c;一般需要編寫各種SQL語句&#xff0c;萬一生產環境出現了慢查詢&#xff0c;那么我們如何快速定位到底是程序中的那個SQL出現的問題呢&#xff1f; 2、解決方案 如果我們的數據訪問層使用的是mybatis的話&#xff0c;那么我們可以通過…

【Linux】centos配置可用的yum源

在 CentOS 系統中配置可用的 YUM 源&#xff08;倉庫&#xff09;是保持系統更新和軟件包管理的重要步驟。下面是一些步驟和示例&#xff0c;幫助你配置可用的 YUM 源&#xff1a; 1. 備份當前 YUM 倉庫配置 首先&#xff0c;備份你當前的 YUM 倉庫配置文件&#xff0c;以防萬…

【CentOS】搭建Radius服務器

目錄 背景簡介&#xff1a;Radius是什么&#xff1f;Radius服務器驗證原理搭建Radius服務器環境信息yum在線安裝配置FreeRADIUS相關文件clients.conf文件users文件重啟服務 驗證 參考鏈接 背景 在項目中需要用到Radius服務器作為數據庫代理用戶的外部驗證服務器&#xff0c;做…

機器學習_特征工程

一、核心知識點&#xff1a;特征工程的核心概念與流程 1. 特征工程的定義與重要性 定義&#xff1a;通過數據預處理、特征構造、特征選擇等方法&#xff0c;將原始數據轉化為更適合機器學習模型輸入的特征&#xff0c;提升模型性能。重要性&#xff1a; “數據和特征決定了機…

Elasticsearch Java High Level Client [7.17] 使用

es 的 HighLevelClient存在es源代碼的引用&#xff0c;結合springboot使用時&#xff0c;會存在es版本的沖突&#xff0c;這里記錄下解決沖突和使用方式&#xff08;es已經不建議使用這個了&#xff09;。 注意es服務端的版本需要與client的版本對齊&#xff0c;否則返回數據可…

rtsp在網頁上顯示(webrtc-stream)

一&#xff1a;windos 平臺 1&#xff1a;下載已經編譯好的windos平臺程序 Releases mpromonet/webrtc-streamer (github.com) or 【免費】webrtc-streamerv0.8.6一款werbrtc服務器&#xff08;windos版本&#xff09;&#xff0c;可以直接將rtsp流拉到網頁上顯示資源-CSDN文…