在运行时更改topMost

时间:2012-04-12 23:08:37

标签: c# 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 个答案:

答案 0 :(得分:1)

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

在您的版本中,当true为this.topmost分配时,第二个if条件满足。这就是问题的原因。

让我们说代码执行以false开头,然后首先如果条件满足,则更改为true,检查第二个if条件,它也满足,再次更改为false。

答案 1 :(得分:0)

在第二个示例中,您不是Showing 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变量作为Class级变量,并执行类似的操作。

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
    }
}