Показать значение в текстовом поле в родительской форме ячейки, выбранной в представлении сетки в дочерней форме

#c# #visual-studio #winforms #textbox

#c# #visual-studio #winforms #текстовое поле

Вопрос:

Это мой код: В родительской форме:

 public void tokenform_Load(object sender, EventArgs e)
    {
       tbvarchecker.Text = HelpForm.code;
    }
   private void TextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        HelpForm help = new HelpForm();
        if (e.KeyCode == Keys.F2)
        {               
            help.Show();               
        }
    }
    public void setvalues(string cd)
    {
        tbvarchecker.Text = cd;
        label10.Text = cd;
    }

  Child Form code:
     private void dgv(object sender, DataGridViewCellMouseEventArgs e)
    {
        DataGridViewRow row = dgvshowallfields.Rows[e.RowIndex];

        code = row.Cells[0].Value.ToString();
        code1 = row.Cells[0].Value.ToString();
        this.Close();
    }

    private void HelpForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        tokenform tkf = new tokenform();
       tkf.setvalues(code);
        tkf.setvalues(code1);
        tkf.tokenform_Load(sender,e);

    }

    //private void HelpForm_FormClosing(object sender, FormClosingEventArgs e)
    //{
    //    tkf.setvalues(code);
    //}
 

Этот код объявлен как общедоступный статический строковый код, в то время как code1 — это просто строка.
Я также проверил точки останова, и значение достигает значения функции в родительской форме, но, тем не менее, я не смог показать его в текстовом поле.
Ребята, кто-нибудь может мне помочь …..??

Ответ №1:

Сначала передайте родительскую форму вашему Show() вызову.

Изменить:

 help.Show();
 

Для:

 help.Show(this);
 

Затем в дочерней форме вы можете привести .Owner свойство к вашему родительскому типу формы и вызвать его методы:

 private void HelpForm_FormClosed(object sender, FormClosedEventArgs e)
{
    tokenform tkf = this.Owner as tokenform;
    if (tkf != null) 
    {
        tkf.setvalues(code);
        tkf.setvalues(code1);
        tkf.tokenform_Load(sender,e);
    }
}
 

Комментарии:

1. Большое спасибо, братан, это помогло, но не могли бы вы объяснить, что я делал не так и почему я не мог показать это значение раньше ….??

2. В вашем событии FormClosed() вы создавали новый экземпляр tokenform . Этот экземпляр, который вы пытались использовать, был просто невидимым и не совпадал с экземпляром, который вы видите на своем экране.