Доступ к объекту создателя - PullRequest
0 голосов
/ 11 мая 2009

У меня есть простое приложение для Windows на C # с 3 формами. первая форма - это основная форма (ее имя FrmMain), вторая - FrmData, а третья - FrmShow. В основной форме (FrmMain) я создал экземпляр из второй формы (FrmData) и показываю его:

    public partial class FrmMain : Form
    {
        public Form FrmModifyData; //for FrmData
        int PersonCode;
        public FrmMain()
        {
            InitializeComponent();
        }

        private void btnShowDataForm_Click(object sender, EventArgs e)
        {
            FrmModifyData= new FrmData();  
            FrmModifyData.ShowDialog();

        }
    }

но я не могу получить доступ из FrmModifyData к полям FrmMain, таким как PersonCode . Как я могу получить доступ к полю объекта создателя?

Примечание: я новичок.

спасибо.

Ответы [ 3 ]

3 голосов
/ 11 мая 2009

Вам потребуется добавить свойство в ваш класс FrmModifyData, чтобы взять экземпляр класса FrmMain. Тогда вы можете сделать это:

FrmModifyData = new FrmData();
FrmModifyData.ParentData = this;
FrmModifyData.ShowDialog();

Тогда внутри FrmModifyData у вас будет доступ к открытым членам FrmMain. Очевидно, это довольно быстро и грязно и не очень многократно используется, поэтому я бы предложил добавить более явные свойства в FrmModifyData только с теми данными, которые вам нужны.

0 голосов
/ 07 сентября 2012

Я бы сделал это примерно так. Таким образом, вы можете использовать FrmModifyData в других формах.

Я знаю, что это старый пост, но да, вы прочитали его:)

public partial class FrmMain : Form
{
    // public Form FrmModifyData; <-- do not declare it in your FrmMain 
    // (is't a modal dialog, so you won't get more instances)

    public int PersonCode {get; set;}

    public FrmMain()
    {
        InitializeComponent();
    }

    private void btnShowDataForm_Click(object sender, EventArgs e)
    {
        FrmData FrmModifyData = new FrmData();
        FrmModifyData.PersonCode = this.PersonCode;
        DialogResult result = FrmModifyData.ShowDialog();
        if(result == DialogResult.Ok)
        {
            // do something with the result
            this.PersonCode = FrmModifyData.PersonCode;


        }

    }
}
0 голосов
/ 11 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...