2012-04-12 4 views
0

Я использую этот код .. Теперь по умолчанию моего приложение TOPMOST = истинаизменение TOPMOST во время выполнения

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

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(); 
} 
+1

код совет: * Никогда * писать ', если (х == верно)', и вы, вероятно, следует писать '', если вместо ', если (х == ложь)' тоже (х!). В этом случае, однако, 'this.TopMost =! This.TopMost;' будет достаточным для всего метода. – Ryan

+3

Вы также можете написать TopMost =! TopMost. –

+0

Erm, подождите, как вы нажмете его второй раз, если он отключится? Изменение TopMost имеет множество возможных побочных эффектов, восстанавливается собственное окно Windows. Вам нужно будет улучшить свои доказательства, чтобы помочь нам помочь вам. Небольшой репрограммный проект с этой проблемой лучше всего, отправьте его в службу обмена файлами, если он еще слишком большой для публикации. –

ответ

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

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

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

+1

Или вы могли бы просто сделать это. TopMost =! This.TopMost -> Если это было ложно, это будет правдой. Если бы это было правдой, это станет ложным – thorkia

+0

Это сработает, исправьте .. но теперь проблема меняет его из другой формы. –

+0

@thorkia Это отличное предложение. Мне нравится. Но я не уверен в удобочитаемости. – Sandeep

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 собственность, я бы свою форму переменную в качестве переменной уровня класса и сделать что-то вроде этого.

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

Хм. это будет работать, да .. но проблема в том, что я использую заставку, чтобы она снова и снова показывала всплеск при сохранении. –

+0

@Jogn Что вы пытаетесь сделать? Какова цель этой формы. –

Смежные вопросы