2015-07-23 4 views
1

В моем приложении у меня есть родительская форма и всплывающая форма. В форме всплывающего окна, когда я нажимаю кнопку 1, приложение должно вызывать функцию, и в результате этой функции метка должна изменить свой текст. Хотя всплывающая кнопка работает, у меня есть две родительские формы; один с меткой в ​​своем состоянии по умолчанию и один с меткой, измененной в результате нажатия на кнопку во всплывающем окне. Есть ли способ скрыть исходную родительскую форму? Вот код, я использую в всплывающей форме:Дублирующие родительские формы в результате вызова функции из дочерней формы

public Form1 f1 = new Form1(); 
private void button1_Click(object sender, EventArgs e) 
    { 

     f1.referansyaz = true; 
     f1.Show(); 

    } 

Так что, когда я изменить переменный «referansyaz» к истинному, вызвать функцию в виде 1, и в результате этой функции метки в виде 1 (или родительская форма). И f1.show(), открывает обновленный вид 1.

+0

Была ли эта вторая родительская форма получена (с начальным значением метки)? Не могли бы вы более конкретно узнать, что вы хотите ... Пожалуйста, проверьте мой ответ на другой вопрос здесь: http://stackoverflow.com/questions/31582159/show-second-form-instead-of-first-form-when- winforms-load-in-c-sharp/31582557 # 31582557 – Fabjan

+0

У вас есть два совершенно разных экземпляра 'Form1'. Вместо того, чтобы устанавливать значение на втором и скрывать первое, вам нужно передать ссылку на исходную форму Form1 в вашу форму с помощью кнопки. –

+0

'public Form1 f1 = new Form1();' эта строка создает новый экземпляр родительской формы. Поскольку @GrantWinney сказал, что вам нужно передать ссылку на вашу исходную родительскую форму. – learningNew

ответ

-2

Вы пытались скрыть это с помощью:

this.Hide(); 

Вот что работает для меня:

private void button1_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
     Form1 f1 = new Form1(); 
     f1.referansyaz = true; 
     f1.Show(); 
    } 
+0

нет, он не работает, так как this.Hide() скрывает всплывающее окно. Он не скрывает исходную родительскую форму. – comsfollower

+0

Вы называете это до f1.Show()? –

+0

Я хочу скрыть родительскую форму (aka form1), this.Hide() скрывает всплывающее окно (aka form2). – comsfollower

0

Создание второго экземпляра Form1 есть нет что вы хотите сделать.

Измените всплывающую форму, чтобы принять ссылку на оригинальную форму:

public class PopupForm : Form 
{ 
    private Form1 f1; 

    public PopupForm(Form1 f1) 
    { 
     this.f1 = f1; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     f1.referansyaz = true; 

     Close(); 
    } 

    // rest of form 
    ... 
} 

передать ссылку при создании экземпляра формы всплывающую:

var popupForm = new PopupForm(this); 

popupForm.ShowDialog(); 

Как правило, хотя, я бы создать общедоступную имущество на детской форме ...

public class PopupForm : Form 
{ 
    public bool Referansyaz { get; private set; } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Referansyaz = true; 

     Close(); 
    } 

    // rest of form 
    ... 
} 

... для потребления родителем после ch ИСД (всплывающее окно) форма замкнута:

var popupForm = new PopupForm(); 

popupForm.ShowDialog(); 

referansyaz = popupForm.Referansyaz; 

Таким образом, изменение имени поля в родительской форме не нарушает форму ребенка тоже.

+0

Где я могу добавить последние 2 строки кода? (т. е. var popupForm = new PopupForm (this); popupForm.ShowDialog();) – comsfollower

+0

Где бы вы не отображали всплывающее окно в форме1. –

0

Вы можете изменить свой код следующим образом и передать метод, который изменяет ваш ярлык в родительской форме с помощью делегата во вторую форму. Я бы настоятельно рекомендовал не передать экземпляр вашей родительской формы в виде ребенка, поскольку она нарушает открыто-замкнуты принцип ...

Так в основной тип формы:

public partial class Form1 : Form 
{ 
    public Action<bool> a; `  
    public Form1() 
    { 
     InitializeComponent(); 
     a = new Action<bool>(newValue => this.referansyaz.Text = newValue.ToString()); 
    } 

    // some code where you create your Form2 

    Form2 newForm = new Form2(a); 
} 

Тогда в вашей второй форме:

public partial class Form2 : Form 
{ 
    Action<bool> a; 

    public Form2(Action<bool> a) 
    { 
     this.a = a; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    {  
     a(true); 
    } 
} 
Смежные вопросы