Как запретить пользователю доступ к родительской форме до ответа на текущую форму - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь разработать простую клиентскую программу с лицензионным ключом, в которой пользователь не может получить доступ к родительской форме, пока они не активируют свое программное обеспечение, и я не могу запретить им щелкать родительскую форму и взаимодействовать с ней. Я не хочу использовать Form.ShowDialog (), потому что я хочу открыть оба одновременно, если пользователь не запросил свой лицензионный ключ. Любые мысли о том, как я могу выполнить sh это?

РЕДАКТИРОВАТЬ: Вот мой конструктор MainApp:

  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.

Обратите внимание, что это просто подтверждение концепции, и я понимаю, что код не очень хорош.

1 Ответ

0 голосов
/ 18 апреля 2020

Вам необходимо указать родительское окно. Существует перегрузка, которая принимает IWin32Window.

Во-первых, вам нужно сделать это в точке, где существует окно, например, обработчик события Load, а не конструктор. Поскольку окно еще не видно по умолчанию, вам нужно вызвать Show, чтобы сделать его видимым, прежде чем показывать модальное диалоговое окно.

this.Show();

AuthTest authTest = new AuthTest();
authTest.ShowDialog(this);           // Assuming 'this' is the main window instance.

Если this не является экземпляром главного окна в этом В этом контексте вам необходимо передать жизнеспособного родителя любому методу.

Вызов authTest.BringToFront не будет выполнен до тех пор, пока диалог не будет закрыт, поэтому он вам не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...