无法使用上下文菜单项显示按钮文本

Cant show button text using a contextmenustrip item

我的表单上有许多按钮是由代码(在表单加载事件中)生成的,如下所示:

for(int j = 0; j < 30; j++)
{
    Button btn = new Button();
    btn.Text = numb_cust;
    //The text will be different for every button created
    btn.ContextMenuStrip = MyContextMS;
    //Every button will have this contextMenuStrip
}

还有一个只有一个名为 'See details' 的项目的 ContextMenuStrip,我想做的是打开一个 MessageBox,在我单击该项目时显示按钮的文本 我有这个:

Button B;
private void MyContextMS_Opening(object sender, System.ComponentModel.CancelEventArgs e)
{
    B = sender as Button;
}

private void SeeDetailsToolStripMenuItem_Click(object sender, EventArgs e)
{
    Button b = B;
    MessageBox.Show(b.Text);    
}

但是当 Button b 试图显示 MessageBox 时我得到 NullReferenceException,请帮助我。

发件人永远不会是按钮,因为发件人是执行点击的 ToolStripMenuItem。

尝试检查 SourceControl 属性:

Control ctrl;

void MyContextMS_Opening(object sender, CancelEventArgs e) {
  ctrl = ((ContextMenuStrip)sender).SourceControl;
}

private void SeeDetailsToolStripMenuItem_Click(object sender, EventArgs e) {
  Button b = ctrl as Button;
  if (b != null) {
    MessageBox.Show(b.Text);
  }
}