请解释。

在第3行中,我不知道为什么使用类按钮强制转换发件人对象,

发送方对象如何在第3行中起作用

在第3行中使用Button类的原因是什么?

1. private void button_Click(object sender, EventArgs e)
2. {
3.      Button btn = (Button) sender;
4.      textBox1.Text = textBox1.Text + btn.Text;
5. }

最佳答案

从声明中可以看到

private void button_Click(object sender, EventArgs e)


唯一的保证是senderobject类型;并且object实例没有Text属性

private void button_Click(object sender, EventArgs e) {
  // sender.Text doesn't compile - sender being Object doesn't have Text property
  textBox1.Text = textBox1.Text + sender.Text;
}


因此,您已强制转换为具有Text属性的类型,这是Control的最准确方法:

private void button_Click(object sender, EventArgs e) {
  // Control: Button, TextBox, Panel etc.
  Control ctrl = sender as Control;

  // If we succeed in cast (i.e. sender is a Control)
  if (ctrl != null)
    textBox1.Text = textBox1.Text + ctrl.Text;
}


当显式强制转换为Button

Button btn = (Button) sender; // dangerous code


可能很危险:例如,您可能想在不检查转换结果的情况下添加myPanel.Click += button_Click(将myPanel作为Button进行处理)。

关于c# - Windows窗体强制转换Button类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41220681/

10-17 02:08