Изменить topMost во время выполнения

Я использую этот код.. теперь по умолчанию мое приложение topMost = true

Но когда я пытаюсь заставить кнопку выполнить эту функцию ниже, я получаю проблему, она отключит ее один раз. Тогда по второму клику не снова.

public void setTop()
{
    if (this.TopMost == false)
    {
        this.TopMost = true;
    }
    if (this.TopMost == true)
    {
        this.TopMost = false;
    }

Есть идеи почему? это также случалось в прошлом с настройками горячих клавиш из меню, я смог сделать это один раз, после этого это не работает:(

Изменить: я узнал, как это сделать, но не смог сделать это из другой формы с этим.

private void button1_Click(object sender, EventArgs e)
{
    pwn4g3 mainForm = new pwn4g3();
    mainForm.TopMost = true();
    mainForm.Update();
}

2 ответа

public void setTop()
{
    if (this.TopMost == false)
    {
        this.TopMost = true;
    }
    else // change this to else. 
    {
        this.TopMost = false;
    }
}

В вашей версии, когда true присваивается this.topmost, второй if условие удовлетворяет. Это является причиной проблемы.

Допустим, выполнение кода начинается с false, затем сначала, если условие выполнено, изменяется на true, проверяет второе, если условие также выполнено и снова изменяется на false.

Вы не показываете свой Form во втором примере попробуйте:

private void button1_Click(object sender, EventArgs e)
{
    pwn4g3 mainForm = new pwn4g3();
    mainForm.Show();
    mainForm.TopMost = true;
    mainForm.Update();
}

Также, если вы используете mainForm.Show(this); вторая форма будет принадлежать вашему Parent Form и будет сверху автоматически.

private void button1_Click(object sender, EventArgs e)
{
    pwn4g3 mainForm = new pwn4g3();
    mainForm.Show(this);
}

Но лично, если бы я хотел переключить свойство Topmost, я бы использовал свою переменную Form в качестве переменной уровня класса и сделал бы что-то подобное.

public partial class Form1 : Form
{
    pwn4g3 mainForm = new pwn4g3();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if(mainForm.IsDisposed )   //Check that Form hasn't been destroyed
           mainForm = new pwn4g3();
        if(!mainForm.Visible)  //Make sure it is visible
            mainForm.Show();

        mainForm.TopMost = !mainForm.TopMost;
        this.BringToFront(); //To verify zorder of created form
    }
}
Другие вопросы по тегам