C# 如何防止用户可以';t关闭在C中主窗体的构造函数中初始化的Loginform#

C# 如何防止用户可以';t关闭在C中主窗体的构造函数中初始化的Loginform#,c#,C#,这里有两个表单,mainform和loginform。 首先,loginform出现,因为它是在mainform的构造函数中初始化的 public partial class MainForm : Form { public MainForm() { InitializeComponent(); // LoginForm frmLogin = new LoginForm(); frmLogin.ShowDialog(

这里有两个表单,mainform和loginform。 首先,loginform出现,因为它是在mainform的构造函数中初始化的

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        //
        LoginForm frmLogin = new LoginForm();
        frmLogin.ShowDialog();
        //
    }
}

因此,我想防止用户无法通过标题栏中的[X]关闭Loginform,因为在主窗体出现之后。感谢

将登录表单的
控制框
属性设置为
false
。这样,在右上角没有最小化、最大化或关闭按钮:


看起来您没有处理对话框结果。请正确取消,因为用户使用指定为“取消”按钮的“关闭”按钮关闭与单击角落中的“关闭X”按钮之间没有区别。您仍然需要做一些比“中止、重试、失败”循环更好的事情

您可以将FormBorderStyle设置为None和/或将ControlBox设置为false。两者都会隐藏“取消”框,但前者也会阻止用户移动或调整对话框大小

  private void InitializeComponent()
  {
     this.SuspendLayout();
     // 
     // Form1
     // 
     ...
     this.ControlBox = false;
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
     ...
     this.ResumeLayout(false);
  }

尽管如此,我倾向于同意汉斯·帕桑的观点。诱捕用户是不好的/恼人的/不专业的。无法关闭的对话框使我想从我的电脑上取消程序。

这是一个XY问题。您要求的是Y,X是您没有正确使用ShowDialog()。永远不要陷阱用户,他想关闭对话框,因为他不知道密码。当然完全正常。修正:

    using (LoginForm frmLogin = new LoginForm()) {
        if (frmLogin.ShowDialog() != DialogResult.OK) Environment.Exit(0);
    }

还请注意相当大的W问题,提示用户登录Winforms是永远不正确的。您已经知道用户是谁,他在启动您的程序之前已登录Windows。一个高度安全的登录过程。这比您添加的更重要,使攻击者有更多的方法来发现可以利用的用户名+密码。这样的登录仅适用于web应用程序。

如果您在这方面遇到问题,则说明您的设计是错误的。您的表单可以(也应该)在不登录的情况下工作,在这种情况下,登录应该是可绕过的,或者不应该,在这种情况下,它不应该出现(或者至少应该立即关闭)。在任何情况下,在构造函数中显示一个对话框很可能是一个非常糟糕的主意:)我想你可以设置
LoginForm
,因为第一个formLoginForm只是为了控制谁可以访问程序,然后如果密码正确,程序将被打开……你是对的,但我正在寻找它的代码谢谢。它的代码?设置我列出的属性,然后参考InitializeComponent()了解代码。谢谢,你说得对。但是我正在寻找一些与DialOreSult相关的代码,我在程序中使用了它,但我记不起来它是什么样子的((if(frmlogin.DialogResult==DialogRuslt.cancel)Application.ExitThread();)
这样的登录只适用于web应用程序。
电子邮件客户端或类似Steam的客户端如何?它们是web应用程序。他们联系互联网上的服务器。