2013-12-16 4 views
1

Привет, У меня есть программа на C#, которая имеет кнопку. Поэтому, когда мы нажимаем кнопку, он будет вычислять некоторые значения в форме, содержащей эту кнопку (form1), и результат будет отображаться как текст в метке в другой форме (form2).Как разместить текст на этикетке в другой форме, когда мы нажимаем кнопку в другой форме?

Как я буду это делать? Кто-нибудь может объяснить мне код?

+1

было бы неплохо, если бы вы добавить фрагмент кода –

+0

Вы должны иметь ссылку на '' Form1' к Form2'. Я предполагаю, что вы создаете вторую форму с первой. Тогда у вас есть ссылка, которую вы можете использовать. Сохраните его в глобальной переменной, чтобы вы могли получить к нему доступ из нескольких методов. –

+0

Можете ли вы прокомментировать синтаксис, как это сделать? –

ответ

1

Объявите Form2 переменную в вашем Form1:

Form2 f2 = new Form2; 

Внутри Form2 создать SetLabelText метод:

public void SetLabelText(string text) 
{ 
    this.label1.Text = text; 
} 

Всякий раз, когда вам нужно обновить этикетку на второй форме:

f2.SetLabelText("Message generated by Form1"); 

EDIT: полный Пример

Первая форма:

public partial class Form1 : Form 
{ 
    public Form2 f2; 

    public Form1() 
    { 
     InitializeComponent(); 

     f2 = new Form2(); 
     f2.Show(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     f2.SetLabelText("testing"); 
    } 
} 

Вторая форма:

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public void SetLabelText(string text) 
    { 
     this.label1.Text = text; 
    } 
} 
+0

, который я делаю сначала, но я получаю эту ошибку «недоступен из-за уровня защиты» –

+0

@Optimuskck, что вы имеете в виду? Сначала вы создаете 'Form1', а затем' Form2'. Может быть, (отредактированный) полный пример поможет вам больше. –

+0

Форма 1 - есть текстовые поля и кнопка управления. поэтому, когда я нажимаю кнопку команды, значение в текстовых полях будет складываться и помещаться на другой ярлык в форме 2 –

0

Я бы с событием. Пусть ваша форма уведомлять вторую форму, которая число было рассчитано:

public partial class Form1 : Form 
{ 
    public event EventHandler<NumberCalculatedEventArgts> NumberCalculated; 

    private void ButtonClick(object sender, EventArgs e) 
    {    
     int value = 42; // calculate value 
     OnNumberCalculated(value); // Notify subscribers 
    } 

    protected void OnNumerCalculated(int value) 
    { 
     if (NumberCalculated != null) // Check if somebody needs notification 
      NumberCalculated(this, new NumberCalculatedEventArgs(value)); 
    } 
} 

Вторая форма должна подписаться на события этой формы:

public partial class Form2 : Form 
{ 
    private void ShowCalclulatorButton_Click(object sender, EventArgs e) 
    {    
     Form1 form1 = new Form1(); 
     form1.NumberCalculated += Form1_NumerCalculated; // Subscribe 
     form1.Show(); 
    } 

    void Form1_NumerCalculated(object sender, NumberCalculatedEventArgs e) 
    { 
     label1.Text = e.Value.ToString(); // Handle notification 
    } 
} 

И последнее, что вам нужно будет пользовательских арг событий, чтобы обеспечить расчетное значение:

public class NumberCalculatedEventArgts : EventArgs 
{ 
    public NumberCalculatedEventArgts(int value) 
    { 
     Value = value; 
    } 

    public int Value { get; private set; } 
} 

Вы также можете использовать Action вместо пользовательского дескриптора события г, чтобы сделать решение более компактным:

public partial class Form1 : Form 
{ 
    public event Action<int> NumberCalculated; 

    private void ButtonClick(object sender, EventArgs e) 
    {    
     int value = 42; // calculate value 
     if (NumberCalculated != null) 
      NumberCalculaed(value); 
    } 
} 
Смежные вопросы