Кнопка Показать / Обновить работает правильно - PullRequest
1 голос
/ 29 января 2011

У меня есть флажок в form1, когда он установлен, он делает PictureBox в form2 видимым, но когда я снимаю флажок, я хочу обновить form2, чтобы PictureBox не было видно.Этот код в form1.Это кнопка, которая открывает форму, если она не открыта, но если форма открыта, она обновляет ее.Проблема в том, что это не освежает.Может кто-нибудь сказать мне, что не так?

private tuesday _FavoritesForm;

public void startbutton_Click(object sender, EventArgs e)
{
    if (_FavoritesForm == null)
    {
        _FavoritesForm = new tuesday();
        _FavoritesForm.Closed += new EventHandler(_FavoritesForm_Closed);
        _FavoritesForm.Show();
    }
    else
    {
        _FavoritesForm.Refresh();
    }

}

Ответы [ 2 ]

3 голосов
/ 29 января 2011

Вызов Refresh для формы просто заставляет ее перекрашивать. Нет никаких оснований предполагать, что он будет перекрашиваться по-другому. Вам придется переопределить метод OnPaint () в этой форме. Очевидно, что вы не используете OnPaint для рисования изображения, вы используете PictureBox. Если для свойства Visible этого элемента управления установлено значение false, изображение исчезнет, ​​дополнительная помощь не требуется.

2 голосов
/ 29 января 2011

Я бы добавил публичный метод на вторичной форме, чтобы показать / скрыть картинку, потому что кажется, что вторая форма не имеет представления о первой форме. Затем установите параметр click / checkbox в первой форме, чтобы вместо выполнения операции «REFRESH» для второй формы, создать форму, если это еще не сделано. После создания вызовите любой метод, который вы предоставляете во вторичной форме, чтобы он был специально отображен или не отображался по мере необходимости.

РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ

@ a13xy, на самом деле наоборот ... Вторая форма не имеет представления о первой, но да, есть метод, который открыт для 2-го. Затем в ПЕРВОЙ форме в событии щелчка / значения, установленном для вашего флажка, вы просто вызываете метод из этого ... такой как пример кода ...

    public void startbutton_Click(object sender, EventArgs e) 
    { 
      if (_FavoritesForm == null)     
      {  _FavoritesForm = new tuesday();         
         _FavoritesForm.Closed += new EventHandler(_FavoritesForm_Closed);
         _FavoritesForm.Show();     
      }     
      else     
      {  _FavoritesForm.Refresh(); 
      } 

      _FavoritesForm.ShowHide( IsCurrentForms.CheckBox.IsCheckedValue );
   }

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

public void ShowHide( Boolean ShowTheImage )
{
    // value provided as a direct parameter from the first form, 
    // THISform knows about its own Picture property and can directly
    // set the visibility within its scoped control.
    this.YourPicture.Visible = ShowTheImage  
}
...