C# 如何限制用户在响应当前窗体之前访问父窗体
我正在尝试设计一个简单的许可证密钥客户端程序,用户在激活其软件之前无法访问父窗体,我似乎无法阻止他们单击父窗体并与之交互。我不想使用Form.ShowDialog(),因为如果用户尚未声明其许可证密钥,我希望同时打开这两个对话框。你有没有想过我该如何做到这一点 编辑:这是我的MainApp构造函数:C# 如何限制用户在响应当前窗体之前访问父窗体,c#,.net,visual-studio,C#,.net,Visual Studio,我正在尝试设计一个简单的许可证密钥客户端程序,用户在激活其软件之前无法访问父窗体,我似乎无法阻止他们单击父窗体并与之交互。我不想使用Form.ShowDialog(),因为如果用户尚未声明其许可证密钥,我希望同时打开这两个对话框。你有没有想过我该如何做到这一点 编辑:这是我的MainApp构造函数: public MainApp() { InitializeComponent(); MySqlConnection conn; this.
public MainApp()
{
InitializeComponent();
MySqlConnection conn;
this.FormClosing += new FormClosingEventHandler(MainApp_FormClosing);
string connString = "";
string sql = String.Format("SELECT COUNT(*) FROM license_keys WHERE hwid='{0}';", ComputerInfo.GetComputerId());
using (conn = new MySqlConnection(connString))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
var result = Convert.ToInt32(cmd.ExecuteScalar());
if (result == 0)
{
AuthTest authTest = new AuthTest();
authTest.ShowDialog(this);
authTest.BringToFront();
}
}
}
}
问题是,如果SQL查询没有返回任何内容,我希望两个表单都打开,但我希望主表单(此类)仍然显示,但如果用户在响应AuthTest表单之前尝试与它交互,则会向用户发出警告(声音和闪烁)
请注意,这只是一个概念证明,我理解代码并不好。您需要指定父窗口。有一个重载接受
IWin32Window
首先,您需要在窗口存在的位置执行此操作,如Load
事件处理程序,而不是构造函数。因为默认情况下窗口还不可见,所以在显示模式对话框之前,需要调用Show
使其可见
this.Show();
AuthTest AuthTest=新的AuthTest();
authTest.ShowDialog(此);//假设“this”是主窗口实例。
如果this
不是该上下文中的主窗口实例,则需要将可行的父级传递给任何方法
对
authTest.BringToFront
的调用在对话框被取消之前不会执行,因此您不需要它。这就是ShowDialog
的用途,因此如果您得到的结果不是这样,那么您就错用了它。如果没有代码,我们无法帮助您确定需要修复的内容。@madreflection编辑了文章以包含逻辑。不要在工作线程上显示UI。结果比一个非模态的对话要糟糕得多。是的,我已经看到了这个答案,并且试过了。问题是,程序仍然首先打开AuthTest窗体,然后仅在关闭AuthTest窗体后才打开主窗体。那么,该程序在哪里运行?建造师?表单加载?请显示更多的类。它在构造函数中运行。它需要在Load
事件处理程序中完成,您需要调用this。首先显示。当构造函数运行时,窗口(HWND)还不存在,因此无法在此时显示。