c# 弹出选择窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 弹出选择窗口相关的知识,希望对你有一定的参考价值。

我的页面上有一个选择住房编号的DropDownList,一个按钮“添加缴费单”,点击按钮后,弹出窗口显示:你确定要添加该住房的业主的缴费单吗? 弹出的窗口上有两个按钮,一个是“确定”,一个是“取消”。 按“确定”则回到页面,执行页面上那个按钮所对应的button_click函数;按“取消”则不执行那个按钮所对应的button_click函数。

另外一个问题:
这个页面的cs代码中,在类里定义了一个变量strId,用于存储根据选中的住房编号而在数据库中查到该住房的业主编号。页面上有一个按钮“查询”,点击能够查到业主编号,赋给strId。另一个按钮“添加缴费单”,点击,我希望能够添加该业主的缴费单,其中用到了strId . 但是发现,点击查询后,是查到了业主编号,付给了strId;可是点击“添加缴费单”后,由于strId是在这两个click函数外定义的类中全局变量,所以strId又被初始化为空了。
怎样能够点击“添加缴费单”时,strId不再被初始化。

1
if (MessageBox.Show("你确定要添加该住房的业主的缴费单吗?", "确认", MessageBoxButtons.OKCancel) == DialogResult.OK)

button_click函数;


2
方法1:strId设置为全局变量
方法2:strId传值给函数
参考技术A 好说
第一个问题,用的是<asp:button>控件吧,利用该控件的两个click事件,一个事onclick,一个事onclientclick
onclientclick里写return confirm('你确定要添加该住房的业主的缴费单吗?') onclick里写后台代码的函数名就可以了

第二个问题
同一个页面内,不需要对strId所在的类重新定义,如CLASS NAME = NEW CLASS() 不需要每次调用类时都需要这样,一个页面里,只有需要重新定义时才定义就可以了
参考技术B 第一个问题请使用 “skyftdidi - 举人 四级 ”的方法。
第二个问题可以这样实现:
在也面放一个隐藏的Label,将strId的值赋给Label,这样就能保存下来
参考技术C 你是webform吗?保存在session 参考技术D S/C还是B/S

如何在 C# 控制台或 WinForms 应用程序中使用 Windows 安全的确认证书弹出窗口选择证书?

【中文标题】如何在 C# 控制台或 WinForms 应用程序中使用 Windows 安全的确认证书弹出窗口选择证书?【英文标题】:How to select a Certificate using the Windows Security's Confirm Certificate popup in C# console or WinForms application? 【发布时间】:2020-07-09 22:56:26 【问题描述】:

我想编写一个 C# 控制台或 WinForms 应用程序,以使用证书 .PFX 文件将数字签名添加到 PDF 文件。目前,我可以使用来自文件系统文件夹的 PFX 证书,使用 iText7 和 BouncyCastle 库对 PDF 文件进行签名。

但我需要让用户在运行时从系统中已安装的证书列表中选择一个证书。

具体来说,我想显示 Windows 安全的确认证书对话框,并使用用户选择的证书进行签名。我想显示如下所示的弹出窗口:

我的具体问题是: 如何触发 Windows 安全的确认证书对话框,如何读取用户选择的证书?

编辑 1: 如果我使用 X509Certificate2UI.SelectFromCollection 方法,我会得到一个不同的弹出窗口,如下所示。这和我想要的不一样。

【问题讨论】:

【参考方案1】:

您可以尝试使用X509Certificate2UI.SelectFromCollection 记录在案的here。

正如@Crypt32 在 cmets 中提到的,我觉得有必要添加代码示例如何使用 api。我想知道@AllSolutions 如何设法使用相同的 API 获取该 UI 窗口。似乎 UI 会随着 selectionFlag 参数而变化。

var store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var collection = store.Certificates;
var cert = X509Certificate2UI.SelectFromCollection(collection, "Select", "Select a certificate to sign", X509SelectionFlag.SingleSelection);

【讨论】:

当我使用 X509Certificate2UI.SelectFromCollection 时,我得到了另一种对话框。这与我在问题中显示的不完全相同。我已经在我的问题中发布了我在 EDIT 1 下得到的对话框的屏幕截图 您必须在selectionFlag 方法调用的selectionFlag 参数中设置SingleSelection 标志。这将调用第一个 UI 对话框。当您使用MultiSelection 时,会显示第二个用户界面。 谢谢。这样可行。我有一个后续问题:如何使用 BouncyCastle 库实现相同的目标?要使用 iText 签署 PDF 文件,我需要使用 BouncyCastle 库。所以要么我想要这个使用 BouncyCastle 的证书选择屏幕,否则我如何将 .NET 库的 X509Certificate2 转换为 BouncyCastle 的 Pkcs12Store?你想让我为此发布一个单独的问题吗? 我在***.com/questions/60918431/… 发布了 1 个后续问题

以上是关于c# 弹出选择窗口的主要内容,如果未能解决你的问题,请参考以下文章

c#的 winform怎么使弹出的窗口在屏幕的正中间,就是当我点击链接弹出的窗口。 急~在线等!!!!!!

Winforms c#从弹出表单更改父表单的背景图像

C# .NET弹出窗口大全

C# 弹出窗口查看图片

C#弹出子窗口后,父窗口就不能动

在 c# Xamarin 中等待带有弹出窗口的任务