Использовать функцию из другой формы

ОБНОВЛЕНО

Родительская форма MDI:

public void sample()
{
textBox1.Text = "Sample";
}

private void button1_Click(object sender, EventArgs e)
{
MDIParent1 p = new MDIParent1();
LogInForm LogIn = new LogInForm(p); 
DialogResult res = LogIn.ShowDialog()
}

ЛогИнформа:

private MDIParent1 _p;
public LogInForm(MDIParent1 p)
{
InitializeComponent();
_p = p;
}

private void button1_Click(object sender, EventArgs e)
{
_p.sample();
this.Close();
}

_p.sample(); не работает


person Square Ponge    schedule 27.07.2013    source источник
comment
Какая новая проблема после обновления?   -  person King King    schedule 27.07.2013
comment
функция sample() не срабатывает   -  person Square Ponge    schedule 27.07.2013
comment
Попробуйте выполнить отладку (установите точку останова в строке кода, вызывающей sample(), и посмотрите, не перескочит ли она туда. Я думаю, вы не зарегистрировали button1_Click с событием Click события button1.   -  person King King    schedule 27.07.2013


Ответы (3)


public void sample()
{
   textBox1.Text = "Sample";
}

private void button1_Click(object sender, EventArgs e)
{
   MDIParent1 p = new MDIParent1();
   LogInForm LogIn = new LogInForm(p); 
   DialogResult res = LogIn.ShowDialog()
}

При нажатии кнопки здесь вы создаете НОВЫЙ MDIParent1 и передаете его новому LogInFOrm

private MDIParent1 _p;
public LogInForm(MDIParent1 p)
{
   InitializeComponent();
   _p = p;
}

private void button1_Click(object sender, EventArgs e)
{
   _p.sample();
}

Здесь вы вызываете метод sample для формы, которую вы передали (которая была создана в предыдущей форме, но фактически никогда не отображалась). Чтобы отобразить ее, вам нужно вызвать Show() или ShowDialog().

Если бы вы хотели передать форму, в которой была нажата кнопка, вы могли бы сделать это

LogInForm LogIn = new LogInForm(this);

или вы могли бы использовать Application.OpenForms и вообще не передавать форму.

person Lotok    schedule 27.07.2013
comment
Спасибо, Джеймс :). Является ли Application.OpenForms подобным - person Square Ponge; 27.07.2013
comment
Да, это почти все, что нужно. Все, что вы делаете, это получаете открытую форму по имени, если она существует, и приводите ее к правильному типу формы. Затем вы можете получить доступ к его методу и свойствам. - person Lotok; 27.07.2013
comment
Метод Application.OpenForms более удобен. Спасибо :) - person Square Ponge; 27.07.2013

Изменять

p = _p; 

to

_p = p;

Это все...

person I4V    schedule 27.07.2013
comment
@SquarePonge Doesn't work для меня ничего не значит. Какая у вас ошибка? Возможно ли, что вы ничего не видите, потому что создаете новый экземпляр MDIParent1 вместо передачи текущего? - person I4V; 27.07.2013
comment
@SquarePonge он предложил вам изменить p = _p на _p = p в конструкторе LogInForm(MDIParent1 p), вы сделали это? - person King King; 27.07.2013
comment
@SquarePonge Я думаю, что он действительно срабатывает, перечитайте мой предыдущий комментарий .... (Легко проверить: поставьте точку останова и отладьте свой код.) - person I4V; 27.07.2013

Вам необходимо заменить:

p = _p;

on:

_p = p;

Это может сработать

person Michael    schedule 27.07.2013
comment
Это странно, попробуй отладить - person Michael; 27.07.2013