вызов метода родительской формы в c # - PullRequest
3 голосов
/ 11 мая 2010

я открыл mainform и вызвал дочернюю форму как

     Form4 f = new Form4();
     f.Owner = this;
     f.Show(this);

в form4, пользователь выбирает текстовый файл, содержимое которого должно отображаться в textBox1 основной формы

Я пытался что-то вроде

Owner.textBox1.Text = "file contents";

но это не работает

Ответы [ 6 ]

8 голосов
/ 11 мая 2010

Лучший способ связать разные формы - это события. Создайте событие в Form4 как FileSelected, а затем сделайте что-то вроде этого:

Form4 f = new Form4();
f.FileSelected += (owner, args) => {
    textBox1.Text = args.FileName;
};
f.Show(this);
2 голосов
/ 11 мая 2010

Лучше всего было бы определить свойство, которое само установит свойство Text вашего частного элемента управления. Вот пример:

public partial class MainForm : Form {
    public string ContentDescription {
        set {
            textBox1.Text = value.trim();
        }
    }
}

После этого вы сможете получить доступ к этому свойству посредством приведения типов к вашему конкретному типу:

public partial class SecondaryForm : Form {
    public MainForm OwnerForm {
        get {
            return (MainForm)this.Owner;
        }
    }

    public void someMethod() {
        OwnerForm.ContentDescription = "file contents";
    }
}

Помните, что в C # каждый элемент управления объявляется закрытым. Поэтому для доступа к нему рекомендуется определить свойство, которое предоставит вам необходимый доступ к нему. Обнародование члена обычно не очень хорошая идея, в зависимости от того, чего вы пытаетесь достичь.

РЕДАКТИРОВАТЬ Для метода синтаксического анализа, возможно, вам следует рассмотреть возможность сделать его общедоступным или внутренним, чтобы вы могли получить к нему доступ через правильно приведенное к типу свойство Owner вашей дочерней формы.

Создание класса hlper может быть правильным решением, поэтому оно не зависит от графического интерфейса.

2 голосов
/ 11 мая 2010

Кроме того, это действительно плохой дизайн, вам нужно сделать textBox1 открытым членом вашей главной формы и привести f.Owner к основному типу формы.

Как:

 Form4 f = new Form4();
 f.Owner = this;
 f.Show(this);

 // Inside Form4
 MainForm main = this.Owner as MainForm;
 if (main != null) main.textBox1.Text...
1 голос
/ 11 мая 2010

Поскольку Эндрю уже дал правильное решение для событийного управления, также существует доступный метод синхронизации (или блокировки):

Form4 f = new Form4;
if(f.ShowDialog() == DialogResult.OK)
{
    textBox1.Text = f.FileName;
}
1 голос
/ 11 мая 2010

В Form4 вы можете привести Owner к правильному типу:

var o = (Form1) this.Owner;
o.textBox1.Text = "file contents";

Чтобы это работало, владелец должен иметь тип Form1, а textBox1 для этого типа должен быть открытым членом или свойством.

0 голосов
/ 11 мая 2010

Вам необходимо установить "модификаторы" как минимум на public, чтобы свойства элемента управления могли иметь к нему доступ.

альтернативный текст http://gabecalabro.com/gabe/Capture.PNG

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