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.rhkb.cn/news/33263.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务Sentinel组件:服务保护详解

目录 服务保护简介 服务保护方案 安装与介绍Sentinel Sentinel整合微服务 服务保护实现 请求限流 线程隔离 OpenFeign整合Sentinel 配置线程隔离 服务熔断 编写降级逻辑 实现服务熔断 服务保护总结 服务保护简介 微服务保护是为了保障系统整体的稳定性和可靠性&am…

计算机视觉|首次写入政府工作报告!这个科技新词“具身智能”到底是什么?

一、具身智能与视觉-动作联合建模简介 具身智能&#xff08;Embodied Intelligence&#xff09; 是人工智能领域的关键研究方向&#xff0c;强调智能体通过物理实体与环境交互实现认知和智能行为。与传统人工智能基于静态数据和符号推理不同&#xff0c;具身智能依赖动态感知与…

【Azure 架构师学习笔记】- Azure Databricks (18) --Delta Live Table 架构

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (17) --Delta Live Table和Delta Table Databrics DLT 是一个ETL 框架&#xff0c;通过创建pipeline来简化开发难度&#xff0c;本文介绍两种D…

上下文学习思维链COTPrompt工程

一、上下文学习 上下文学习强调在学习过程中考虑问题所处的上下文环境。 1.1 上下文学习的分类 零样本&#xff08;Zero-Shot&#xff09;上下文学习单样本&#xff08;One-Shot&#xff09;上下文学习少样本&#xff08;Few-Shot&#xff09;上下文学习 1.2 示例选择方法 …

嵌入式裸机设计--MCU常用裸机架构有哪些?

为什么是裸机设计 792125321入群学习更高效&#xff01; 在MCU&#xff08;微控制器单元&#xff09;裸机开发中&#xff0c;我们常见的架构设计主要围绕如何高效管理资源和任务调度。认识这些开发方式&#xff0c;对我们开发一个小型项目来说及有好处&#xff01; 下面介绍…

C语言基础知识04

指针 指针概念 指针保存地址&#xff0c;地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意&#xff0c;把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节&#xff0c; 32bit 固定4字节 指针…

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景&#xff1f; 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目&#xff1f; 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器&#xff08;即项目将被打成 docker image&am…

浏览器崩溃的第一性原理:内存管理的艺术

作者&#xff1a;京东科技 屠永涛 登录后复制 你是否曾经遇到过浏览器突然卡顿&#xff0c;甚至崩溃的情况&#xff1f;尤其是在打开多个标签页或运行复杂的网页应用时&#xff0c;浏览器似乎变得异常脆弱。这种崩溃的背后&#xff0c;往往与内存管理息息相关。 1. 浏览器的内存…

Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

一、缓存雪崩&#xff1a; 1、什么是缓存雪崩&#xff1a; 如果缓在某一个时刻出现大规模的key失效&#xff0c;那么就会导致大量的请求打在了数据库上面&#xff0c;导致数据库压力巨大&#xff0c;如果在高并发的情况下&#xff0c;可能瞬间就会导致数据库宕机。这时候如果…

算法刷题整理合集(一)

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…

ubuntu ollama+dify实践

安装ollama 官网的指令太慢了&#xff0c;使用以下指令加速&#xff1a; export OLLAMA_MIRROR"https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download" curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/dow…

Cookie与Session详解

Cookie简介 Cookie 是浏览器提供的持久化存储数据的一种机制。是指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据&#xff08;通常经过加密&#xff09;。以下是关于 Cookie 的详细介绍&#xff1a; Cookie工作原理 当你访问一个网站时&#xff0c;该网…

Python Openpyxl给Excel增加条件规则

使用openpyxl添加条件格式是一个简单而直接的过程。在使用Excel文件时&#xff0c;条件格式对于数据趋势的可视化、突出显示关键数据点以及使数据更有意义和可理解非常有用。在本文中&#xff0c;我们将详细介绍如何使用openpyxl添加条件格式。 OpenPyxl中的条件格式简介 在进…

离线服务器ollama新增qwen2:0.5b模型

离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama&#xff0c;其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型&#xff0c;那么如何安装呢&#xff1f; 1.首先在有网的服…

零成本本地化搭建开源AI神器LocalAI支持CPU推理运行部署方案

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 嘿&#xff0c;小伙伴们&#xff01;今天给大家带来一个超酷的黑科技——LocalAI。没错&#xff0c;你没听错&#xff0c;就是那个能在你的个人电脑上运行大型语言模…

数据类设计_图片类设计之4_规则类图形混合算法(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及图片的混合算法.前面的内容属于铺垫和基础,这篇内容和实际联系起来了. 背景图和前景图 这里笔者想先…

Burpsuite使用笔记

Burpsuite使用笔记 抓包设置代理open Browserintercept on输入要抓包的网站回车ForwardHTTP history查看抓包数据其他浏览器配置burpsuite代理浏览器代理器插件配置打开代理同样步骤访问 原理三级目录 抓包 设置代理 open Browser 打开内置浏览器 intercept on 输入要抓包…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说&#xff0c;Dockerfile 非常普通&#xff0c;它就是一个纯文本&#xff0c;里面记录了一系列的构建指令&#xff0c;比如选择基础镜像、拷贝文件、运行脚本等等&#xff0c;每个指令都会生成一个 Layer&#xff0c;而 Docker 顺序执行这个文件里的所有步骤&…

移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人

在汹涌澎湃的人工智能浪潮中&#xff0c;具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案&#xff0c;为AI机器人强势赋能&#xff0c;助力其实现跨行业拓展&#xff0c;从工业制造到服务接待&#xff0c;再到医疗康养&#xff0c;不断改写各行业…

技术视界|构建理想仿真平台,加速机器人智能化落地

在近期的 OpenLoong 线下技术分享会 上&#xff0c;松应科技联合创始人张小波进行了精彩的演讲&#xff0c;深入探讨了仿真技术在机器人智能化发展中的关键作用。他结合行业趋势&#xff0c;剖析了现有仿真平台的挑战&#xff0c;并描绘了未来理想仿真系统的设计理念与实现路径…