2016-08-21 7 views
0

Я действительно новичок в C#, и я думал, почему текст ярлыка изменился, когда я установил его в другом значении без помощи обработчика события?Текст ярлыка изменен без обработчика событий с измененным текстом? Зачем?

Вот мой код:

class Main_Program : Form 
{ 
    Button btnAttack = new Button(); 
    Label[] lblEnemyInfo = new Label[4]; 
    public Main_Program() 
    { 
     btnAttack.Text = "ATTACK"; 
     btnAttack.Location = new Point(350, 450); 
     btnAttack.Width = 150; 
     btnAttack.Height = 50; 
     btnAttack.FlatStyle = FlatStyle.Popup; 
     btnAttack.MouseClick += new MouseEventHandler(btnAttack_MouseClick); 

     for (short i = 0; i < 4; i++) 
      lblEnemyInfo[i] = new Label(); 

     string enemyHealth = "Health : " + enemy.Health; //I'm going set the values on label 2 
     lblEnemyInfo[1].Text = enemyHealth; 
     lblEnemyInfo[1].Font = new Font("Segoi UI", 12, FontStyle.Italic); 
     lblEnemyInfo[1].Location = new Point(500, 50); 

     for (short i = 0; i < 4; i++) 
      Controls.Add(lblEnemyInfo[i]); 
    } 
    private void btnAttack_MouseClick(Object sender, EventArgs e) 
    { 
     short totalDamage = totalDamageDeal(enemy.Armor, player.Attack); 
     string log = "You Attack the enemy, you deal " + totalDamage + " damage"; 
     enemy.Health -= totalDamage; 
     string result = "Health : " + enemy.Health; 
     lblEnemyInfo[1].Text = result; 
     lblEnemyInfo[1].TextChanged += new EventHandler(lblEnemyInfo_TextChanged); //The label's text changed even without the eventhandler 
    } 
    private void lblEnemyInfo_TextChanged (object sender, EventArgs e) 
    { 
     //i don't know what statements to put here 
    } 

}

+1

Я не понимаю, о чем вы просите. Событие 'TextChanged' возникает при изменении текста. Это способ сообщить, что текст был изменен, а не способ изменить текст. В вашем вопросе много кода, который, вероятно, не имеет никакого отношения к тому, что вы просите. Пожалуйста, предоставьте хороший [mcve] и объясните, что вы ожидали, и что произошло вместо этого, что вам нужен кто-то, кто вам объяснит. –

ответ

0

EventHandler используется для выполнения кода, когда происходит событие. Если вы не хотите, чтобы что-то произошло, не используйте обработчик событий.

В вашем случае lblEnemyInfo является Label. Он имеет свойство, называемое Label.Text (строки типа). Вы можете изменить это значение, чтобы обновить строку, отображаемую Label. Используя lblEnemyInfo[1].Text = "Health Down";, на соответствующем ярлыке отобразится значение «Здоровье вниз» независимо от того, связан ли с ним обработчик событий.

Вы устанавливаете обработчик события для Label с этим кодом:

lblEnemyInfo[1].TextChanged += new EventHandler(lblEnemyInfo_TextChanged); 

Это означает, что «всякий раз, когда это Label«s Text изменений, вызовите функцию с именем lblEnemyInfo_TextChanged».

Имеется документация по обработке событий in this link (документы MSDN).