Как я закрываю форму, когда пользователь нажимает за окном формы?

В качестве обходного пути вы сможете использовать AWS REST API и использовать этот подход для подписания ваших запросов: https://support.loadimpact.com/4.0/test-scripting/examples/#aws- подписи v4-аутентификация

6
задан Simon 19 November 2008 в 08:46
поделиться

4 ответа

С благодарностью p-папе в этом вопросе, я нашел это решение, которое позволяет мне использовать ShowDialog:

protected override void OnShown(EventArgs e)
{
    base.OnShown(e);
    this.Capture = true;
}

protected override void OnCaptureChanged(EventArgs e)
{
    if (!this.Capture)
    {
        if (!this.RectangleToScreen(this.DisplayRectangle).Contains(Cursor.Position))
        {
            this.Close();
        }
        else
        {
            this.Capture = true;
        }
    }

    base.OnCaptureChanged(e);
}
5
ответ дан 8 December 2019 в 16:12
поделиться

Если это - дочерняя форма в MDI-приложении, Вы могли бы захватить щелчок в родительской форме, иначе решение будет грязно.

Я не убежден, что Вы предлагаете, представляет интуитивное поведение UI так или иначе. Вы уверены, что это - лучший дизайн?

0
ответ дан 8 December 2019 в 16:12
поделиться

При попытке сделать всплывающее окно, которое ведет себя немного как меню, за исключением того, что оно позволяет Вам взаимодействовать со своими средствами управления, Вы могли попытаться разместить usercontrol в выпадающем toolstrip.

0
ответ дан 8 December 2019 в 16:12
поделиться

В событии Deactivate Вашей формы, помещенном "это. Близко ()". Ваша форма закроется, как только Вы нажимаете где-либо еще в Windows.

Обновление: Я думаю, что Вы имеете, прямо сейчас Кнопка регулировки громкости, и в событии Click Вы создаете экземпляр своего VolumeSlider, формируют и заставляют его появиться путем вызова ShowDialog (), какие блоки, пока пользователь не закрывает открытую форму. В следующей строке Вы читаете объем выбранный пользователь и используете его в Вашей программе.

Это в порядке, но поскольку Вы заметили, что это вынуждает пользователя явно закрыть всплывающее окно для возвращения к основной программе. Покажите (), метод, который Вы действительно хотите использовать здесь на Вашей раскрывающейся форме, но Шоу () не блокируется, что означает событие Click назад на Ваших основных концах формы, не зная то, что новый объем, как предполагается.

Простое решение состоит в том, чтобы создать открытый метод для Вашей основной формы как это:

public void SetVolume(int volume)
{
    // do something with the volume - whatever you did before with it
}

Затем в событии Click Вашей Кнопки регулировки громкости (также на основной форме), Вы заставляете VolumeSlider появиться как так:

VolumeSlider slider = new VolumeSlider();
slider.Show(this); // the "this" is needed for the next step

В форме VolumeSlider, поскольку пользователь работает (я предполагаю) полоса прокрутки, Вы помещаете этот код в событие ValueChanged полосы прокрутки (я думаю вот что это значит):

MainForm owner = (MainForm)this.Owner;
owner.SetVolume(scrollbar.Value);

И затем в событии Deactivate формы VolumeSlider Вы поместили бы это. Близко (), как упомянуто выше. Ваша форма будет затем вести себя как ожидалось.

7
ответ дан 8 December 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: