Как снять флажок родительской формы с дочерней формы в C #? - PullRequest
1 голос
/ 11 ноября 2010

Пожалуйста, объясните мне, как снять флажок родительской формы с дочерней формы в Visual Studio C #?

Это похоже на то, когда кнопка в дочерней форме нажата / нажата, тогда флажок в родительской формедолжен быть отключен.

Также я использую WindowsForm.

Пожалуйста, руководство

С уважением

Асад

Ответы [ 4 ]

4 голосов
/ 11 ноября 2010

Итак, я вижу некоторые ... не очень хорошие ответы, говорящие вам о том, что нужно идти вперед и обнародовать свой флажок.Не.Предоставьте событие из ваших MDI-форм, которые основная форма может обрабатывать при их создании.Когда дочерняя форма запускает событие, основная форма может обновлять пользовательский интерфейс так, как считает нужным.

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

Как это сделать?Пожалуйста, наведите

Я был бы рад, особенно если я считаю ответ, который вы выбрали, «правильным», что честно говоря ужасно.Вот простой пример кода, который определяет класс Form, который предоставляет событие.Когда это событие обрабатывается родительской формой, пользовательский интерфейс обновляется.

public class ChildForm
{
    public event EventHandler SomeEvent;

    protected virtual void OnSomeEvent( EventArgs e )
    {
        EventHandler del = SomeEvent;
        if( del != null )
        {
            // fire the event
            del( this, e );
        }
    }

    private void someButton_Click( object sender, EventArgs e )
    {
        // for the sake of example, let's assume that you want
        // to notify listeners of "SomeEvent" when a button is clicked
        OnSomeEvent( this, EventArgs.Empty );
    }
}

public class MainForm : Form
{
    private void ShowChildForm( )
    {
        using( ChildForm frm = new ChildForm() )
        {
            frm.SomeEvent += frm_SomeEvent;
            frm.ShowDialog();
        }
    }

    private void frm_SomeEvent( object sender, EventArgs e )
    {
        // this is where we handle the event "SomeEvent" that the 
        // child form fires when you need to communicate that something has happened.
        // now you may update the UI as needed and the ChildForm class does not have
        // to know anything about how the UI is actually implemented.
        // this is referred to as "loose coupling" and makes your code more maintainable.
        someCheckbox.Checked = true;
    }
}
1 голос
/ 11 ноября 2010

Лучше всего не иметь прямой ссылки / зависимости от вашей дочерней формы на родительскую форму.Ваша дочерняя форма не должна снимать флажок в родительской форме или даже знать о существовании родительской формы (см. Принцип единственной ответственности ).

Один из способов полученияэто означает использование шаблона Observer с использованием события в дочерней форме, которую родительская форма может прослушивать.Вот учебник по событию: http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx.

Пример кода для этого (показан только частичный код):

//Parent form.    
public partial class Form1 : Form
{
    //This is the checkbox on your parent form
    CheckBox myCheckBox = new CheckBox();

    public Form1()
    {
        InitializeComponent();

        Form2 form2 = new Form2();
        form2.MyUncheckingEvent += new EventHandler(form2_MyUncheckingEvent);
    }

    void form2_MyUncheckingEvent(object sender, EventArgs e)
    {
        myCheckBox.Checked = false;
    }
}

//Child form    
public partial class Form2 : Form
{
    public event EventHandler MyUncheckingEvent;

    public Form2()
    {
        InitializeComponent();
    }

    public void MethodFormRaisingTheEvent()
    {
        if (MyUncheckingEvent != null)
        {
            MyUncheckingEvent(this, EventArgs.Empty);
        }
    }
}
0 голосов
/ 11 ноября 2010

см. Мой вопрос get-back-hidden-form-from-another-form

в дополнение к этому вы должны реализовать это так:

0 голосов
/ 11 ноября 2010

Приведите свойство Parent в тип класса главной формы.
Например, в контексте дочерней формы:

(this.Parent as frmMain).MyCheckBox.Checked = false;   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...