如何创建winform登录对话框并保持循环

2023-12-12

创建一个登录表单,如果凭据正确,该登录表单将进入主表单。这是基本的伪代码:

ShowLoginForm()

if (DialogResult == OK)
  CheckCredentials();
  if (credentials == VALID)
    ShowMainForm();
  else
    LoopBackAndShowLoginFormAgain();  //repeat process...
else
  CloseLoginForm();

然而,我对 WinForms 还比较陌生,并且仍在弄清楚。我正在尝试决定将循环放在哪里(Main() 或 LoginForm 中的某个位置)。我应该在哪里检查凭据?这是我到目前为止所拥有的:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    LoginForm loginForm = new LoginForm();
    if (loginForm.ShowDialog() == DialogResult.OK)
    {
        Application.Run(new AutoSignerForm());
    }
}

我不想重复退出并打开登录表单(我在这里寻求一些效率,所以我想使用相同的登录对话框)。有什么指示、技巧或想法吗?


我会做以下事情:

  • 在 Program.cs 中将登录表单显示为对话框

    LoginForm login_form = new LoginForm();
    if(login_form.ShowDialog() == DialogResult.OK) {
        Application.Run(new MainForm());
    }
    
  • 在 LoginDialog 中,处理“Login”按钮(或任何名称)上的单击事件

    // replace with the actual login
    if(textBoxUsername.Text == "my user" && textBoxPassword.Text == "my pass") {
       // save the user has logged in somewhere
       // set the dialog result to ok
       this.DialogResult = DialogResult.OK;
       // close the dialog
       this.Close();
    } else {
       // login failed
       MessageBox.show("Login failed");
       // do not close the window
    }
    

现在,您将保持显示登录对话框,直到用户输入有效的凭据或者他放弃尝试并且应用程序关闭。这样您将只有一个 LoginForm 实例,并且这将是一种很好的用户体验。 另外,您可以确保在用户未成功登录的情况下,MainForm 不会初始化并显示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建winform登录对话框并保持循环 的相关文章

  • 防止单个可执行文件的多个进程实例

    我正在使用 NET 和 C 我想阻止同一可执行文件的两个实例同时运行 但我不想阻止从另一个文件夹运行的同一进程 例如 我有一个位于两个不同位置的可执行文件 C MyProject Master Program exe C MyProject
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 使用反射检测属性的访问修饰符类型

    我编写了一些代码来使用反射查看属性 我已经使用反射从类中检索了属性列表 但是我需要查明该财产是公共的还是受保护的 例如 public string Name get set protected int Age get set Propert
  • 自动化 WinDBG 或以其他方式从转储文件中提取信息?

    假设我有一个进程的内存转储 我想对其运行报告 所以本质上我想打开 WinDBG 加载 SOS 并运行一个脚本 该脚本运行一些命令 解析输出 然后基于该结果运行更多命令 除了像 SendKeys 这样的黑客行为之外 还有没有办法自动化 脚本化
  • 如何为子控制台应用程序使用单独的控制台窗口?

    Windows 10 C NET Core 3 1 我想要多个控制台窗口用于输出 例如 在一个显示器上 我想放置一个控制台窗口 它将仅显示错误输出 在另一个显示器上 我想放置一组其他控制台窗口 它将显示各种报告 所有这些控制台窗口都是只读的
  • 如何使用 makecert 创建证书颁发机构证书?

    我正在尝试创建一个使用 SSL 和自签名证书的网站 这就是我所做的 创建权威证书 makecert n CN root signing authority r sv root pvk root cer 创建目标证书 makecert r p
  • 表单头文件中的“错误 C2653:系统不是类或命名空间名称”,Visual C++

    我之前关于同一项目的问题 one https stackoverflow com questions 15758851 unresolved external sybol in referenced library visual c and
  • 有没有办法强制“任何 CPU”编译的应用程序在 64 位操作系统上以 32 位模式运行?

    如果我有一个 任何 CPU 编译的 NET 应用程序 它将在 64 位操作系统上以 64 位模式运行 但是 如果我出于某种原因想要强制此应用程序以 32 位模式运行 就好像它是使用 x86 编译的 重新编译不是一个选项 那么这可以在运行时配
  • PointToScreen 多个显示器

    我正在使用 PointToScreen 来确定弹出窗口的位置 以便它位于用于弹出窗口的按钮旁边 但是 该按钮位于工具栏上 因此用户可以移动弹出窗口 弹出窗口的位置效果很好 但如果用户位于象限上 我想将弹出窗口移动到底部上方 而不是下方 或左
  • 对 boost::python::detail::init_module 和朋友的未定义引用

    我正在尝试使用官方网站上的示例来测试 boost python 但它会产生很多错误 以下是我所做的和错误 下载Boost1 55与this http choorucode com 2013 12 27 how to upgrade the
  • 如何部署使用sql serverexpress 2012和水晶报表开发的C#windows窗体应用程序

    我在 Microsoft Visual Studio 2013 Net Framework 4 5 中开发了一个应用程序 我使用的 DBMS 是 SQL Server 2012 Express 用于报告的使用的是 Crystal Repor
  • 协变虚函数返回类型问题

    我有以下代码 include
  • 使用 LINQ 计算两个字符串之间的匹配字符数

    一位朋友问我如何使用 LINQ 改进一些代码 如何在两个字符串之间进行逐字符比较以计算索引处的匹配数 这是原始代码 可以使用 LINQ 对其进行改进吗 private int Fitness string individual string
  • QT 和 Crypto++ 以及 /MTd

    我有两个带有 MSVC2013 32 位编译器的 QT 5 5 项目 第一个是 Qt 控制台应用程序 正在使用 crypto 这两个在 pro 文件中 QMAKE CXXFLAGS RELEASE MT QMAKE CXXFLAGS DEB
  • 近指针和远指针

    我们常用的指针 我们通常使用的指针 近指针和远指针之间有什么区别 近指针和远指针在当今的 C C 系统中是否有实际用途 任何需要使用这些特定指针而不是其他 c c 语义的实际场景都会非常有帮助 近和远关键字起源于英特尔之前的分段内存模型 近
  • 计算数组中共线的三元组的数量

    我被问到这个面试问题 C 算法 但不知道如何解决 给定一个包含 N 个不同点的笛卡尔坐标的数组 Arr N 计算三元组 Arr P Arr Q Arr R 的数量 使得 P 有任何想法吗 我可以为此使用什么算法 以下内容可能没有优化 但其复
  • 获取 Qt 对象的大小

    我正在使用 Qt 和 C 我需要找出某些 Qt 类的实例使用的内存量 这通常是使用 sizeof 完成的 但是在 Qt 中 每个类都保存一个指向包含实际实现的另一个类的指针 此私有实现类的定义在标头中找不到 而仅在源代码中找到 我是 Qt
  • 引用未初始化的对象

    在解释问题之前 我想指出我知道给定的示例是糟糕的代码 我已经在看std shared ptr以更合理的方式实现我的目标 写这篇文章的原因只是我的好奇心和学习新东西的愿望 预先感谢您的帮助 今天我的解析器代码有点混乱 优化的东西等等 我专注于
  • 如何创建一个包含自身列表的结构?

    我想创建一个结构 其中包含相同结构的列表 如下所示 include

随机推荐

  • macOS Big Sur:意外的产品版本 11.1。如何修补 perlbrew?

    我刚刚将我的 Macbook Air 从 10 15 更新到 11 1 然后尝试使用 perlbrew 安装 perl 5 32 perlbrew install perl 5 32 0 Installing Users hakonhaeg
  • 轻松循环遍历 ElasticSearch 文档源数组

    我对网上商店中的产品有以下 ElasticSearch 数据结构 index vue storefront catalog 1 product 1617378559 type doc source configurable children
  • 使所有自动递增整数具有相同的位数且带有前导零

    我想知道是否有一种方法可以将我的 id 列 自动递增 设置为始终使用 mysql 表中的前导零组成 5 位数字 所以第一个值将是 00001 然后 00002 等等直到 99999 而不是 1 2 3 直到 99999 谢谢 尝试添加ZER
  • 快速更改 tableviewcell 的宽度

    我有一个使用 IB 的 tableView 以及自定义单元格和原型单元格 我试图使单元格的宽度比 tableView frame 短一点 以便在左右角之间留出一点空间 var cell tableView dequeueReusableCe
  • 如何在jquery对象上调用raphael方法?

    我正在使用拉斐尔创建一些圆圈 当用户单击按钮时 我想为这些圆圈设置动画 通过增加其半径 我该怎么做呢 例如 这是我的示例代码
  • Spring / JTA / JPA 单元测试:回滚不起作用

    我正在尝试使用 Spring 测试实体 EJB3 EJB 本身不使用 Spring 我希望尽量减少生产 JPA 配置的重复 例如 不重复 persistence xml 我的单元测试似乎有效 但即使我的单元测试应该是事务性的 数据也会在各种
  • 如何通过Map<>将快照键和值拉入列表?

    我一直在关注使用实时数据库的官方 Firebase 教程 https www youtube com watch v sXBJZD0fBa4 我能够从 firebase 实时数据库中提取所有数据 但是 下面的方法提供了数据列表 但不引用父键
  • 本地函数相互调用

    我有两个偶尔互相调用的函数 它们对于使用它们构建另一个函数的模块来说是本地的 该模块与这段代码有点相似 local function iseven n if n 1 then return false else return isodd n
  • 搜索时获取数组超出索引范围异常

    我有一个应用程序 其中我将 json 中的数据显示到列表视图中 现在想要在列表视图上应用搜索功能 但是每当我在编辑框中输入某些内容时 就会出现数组索引超出范围的错误 请帮我解决这个问题 主页活动 public class HomeActiv
  • 如何根据 R 中的 regexpr() 结果创建 TRUE 或 FALSE 列?

    我正在通过一列搜索来寻找模式 reg lt regexpr pattern Data column1 View reg reg 给了我一些数字 如下所示 1 43 15 2 11 19 22 28 20 11 37 32 11 32 20
  • 为什么重复加载和保存时 ImageIO 不保留 JPEG 数据?

    最初我想尝试是否可以从 JPEG 图像重建编辑数据 因为它是一种有损图像格式并且像素值扩散到相邻像素中 为了测试保存和加载 JPEG 图像是否可靠 我编写了以下程序 该程序重复保存和加载 JPEG 图像 直到到达以前见过的图像 这是代码 p
  • Mysql查询根据条件选择不同记录?

    我有这样的表结构 ext no value 我想根据条件选择不同的记录 比如当计数时ext no is 超过两个 and 当且仅当所有这些ext no value为零 我想要下面给出的预期结果 比如 如何编写 mysql 查询这个 任何帮助
  • 类型擦除在 Java Map 类中不起作用

    我使用javap反编译了Map类 类定义仍然显示泛型类型 K 和 V 的存在 这应该已经被类型擦除的概念删除了 为什么这种情况没有发生 javap verbose java util Map Classfile jar file opt j
  • 覆盖-类属性- getter

    我正在定义一个 Debug 类 如下所示 debug False class Debug DrawOutlines True InvinciblePlayer True 我想覆盖Debug类 以便如果 debug 为 False 则 Deb
  • 重力右侧和末端之间的差异[重复]

    这个问题在这里已经有答案了 我正在制作一个 xml 文件 并应用重力来使视图内容将其移动到窗口的最右侧 但我将重力视为右侧和末端 那么 两者之间的实际区别是什么以及在哪里使用哪一个 在阿拉伯语 波斯语和所有 rtl 从右到左 语言环境中 e
  • 在另一种形式上调用过程?

    我确信以前有人问过这个问题 但我似乎找不到 我使用下面的代码显示 MS Access 数据库中的图像 但是 我想知道如何执行以下操作 是否可以采用下面的过程并以另一种形式 调用 它 Scenario 如果我有必须从 3 个不同表单上的按钮调
  • 用于命令行脚本的 Cookbook GUI 界面

    我有一个命令行 Python 脚本 可以很好地在给定一些参数的情况下将一种文件转换为另一种文件 现在我想将其部署给我的一些可能不知道命令行是什么的同事 我可以花几个小时来尝试确定哪个 Python GUI 工具包是 最好的 然后学习如何做我
  • 使用随时间变化的任意布尔条件过滤 Touch.FrameReported IObservable

    我一直在尝试 Windows Phone 7 中的响应式扩展 RX 并且非常接近可行的解决方案 但遇到了一个小细节 我正在尝试使用处理原始触摸事件Touch Frame报告 and Observable FromEvent 有点教育追求 更
  • dagger2 和 kotlin 的 Android 单元测试问题

    我试图在 android 的测试文件夹中创建一个 dagger 组件接口 但是在 Dagger 完成生成的类后 它显示错误 无法访问 TestComponent 它是 com example animals di DaggerTestApp
  • 如何创建winform登录对话框并保持循环

    创建一个登录表单 如果凭据正确 该登录表单将进入主表单 这是基本的伪代码 ShowLoginForm if DialogResult OK CheckCredentials if credentials VALID ShowMainForm