2012-02-03 3 views
4

Хорошо, что я неплохо разбираюсь и исследую проблемы без руководства, однако я столкнулся с препятствием. Я пытаюсь создать «Событие» с C# (которого я еще не делал раньше), все, что я искал, не имеет ничего общего с тем, что мне нужно.Обработка событий (обнаружение при скрытой форме)

Я пытаюсь вызвать класс в моей основной форме, когда form2 скрыт. Я нашел код, который должен был проверить, чтобы увидеть, закрыта ли форма 2. Либо я не интегрировал ее в свой код правильно, либо закрытие отличается от скрытия.

Так просто уточнить я хочу запустить через программу, как это:

  • Form1 работает
  • Нажмите кнопку настройки на Form1, которая открывает Form2
  • Form2 открывается, где параметры могут быть изменены
  • Нажмите кнопку «ОК» на Form2 (здесь я хочу, чтобы Form1 реализовал Form2 был скрыт
  • Скрыть форму 1 и запустить класс Refresh, который обновляет имена и URL-адреса кнопок

ответ

2

Открыть вторую форму в виде модального

Form2 form2 = new Form2(); 
DialogResult result = form2.ShowDialog(); 

проверить результат и обновления:

if (result == DialogResult.OK) 
    Refresh(); 

Что вы должны сделать в этом случае при закрытии формы набора DialogResult формы, например, если у вас есть кнопка OK, в наборе кнопок:

this.DialogResult = DialogResult.OK; 

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

Что вы также можете сделать, это установить DialogResult.Cancel на кнопке отмены, если вам это нужно.

+0

Он не смог найти «ShowModal» хотел ссылку. Я изменил его на ShowDialog. Он отлично работает, но когда я щелкнул ОК, он не ссылался на «Обновить». Где я могу поместить «результат»? Я разместил его под «показом» на Form1. – Marshal

+0

Да, извините за опечатку, это ShowDialog() –

+0

Отредактируйте также –

1

Почему бы не открыть Form2 как модальный диалог, используя ShowDialog()? Таким образом, вы можете вернуть значение, если Form2 был закрыт OK или Cancel и действовать соответственно в Form1 после возврата вызова.

1

Если я правильно понимаю, вы хотите иметь класс, в котором хранятся данные о настройках, к которым могут обращаться как Form1, так и Form2. Назовем этот класс Form1Settings и реализовать как:

public static class Form1Settings 
{ 
    public static string ButtonText; 
    public static string Uri; 
} 

Для простоты, я сделал этот класс и его свойство статическим, так как Form1 и Form2 имеют прямой доступ к нему, устраняя необходимость методы обновления.

Form1 вызовет Form2 заблокированным способом и обновит его отображение только при нажатии кнопки OK.

public partial class Form1 : Form 
{ 
    private Form2 form2 = new Form2(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void buttonSettings_Click(object sender, EventArgs e) 
    { 
     if (form2.ShowDialog() == DialogResult.OK) 
     { 
      this.button1.Text = Form1Settings.ButtonText; 
      this.textBoxUrl.Text = Form1Settings.Uri; 
      this.Update(); 
     } 
    } 
} 

И, наконец, Form2 будет обновлять настройки значения с ввода от пользователя:

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void buttonOK_Click(object sender, EventArgs e) 
    { 
     Form1Settings.ButtonText = this.textBoxButton.Text; 
     Form1Settings.Uri = this.textBoxUri.Text; 

     this.DialogResult = DialogResult.OK; 
     this.Hide(); 
    } 
} 
2

Кроме того, вы можете использовать VisibleChanged событие в Form2

private Form2_VisibleChanged(object sender, EventArgs e) 
{ 
    if (!this.Visible) { Refresh(); } 
} 

Это может быть более элегантный ...