【问题标题】:Set button handle in C#在 C# 中设置按钮句柄
【发布时间】:2016-07-12 14:05:31
【问题描述】:
        btnName1 = new Button();
        counter++;
        //Start setting of Button
        btnName1.Location = new Point(47, 35 + a);
        btnName1.Size = new Size(132, 59);
        btnName1.FlatStyle = FlatStyle.Popup;
        btnName1.Text = textBox1.Text;
        btnName1.Name = "btn" + counter.ToString();
        btnName1.BackColor = Color.White;
        btnName1.ForeColor = Color.Black;
        panel1.Controls.Add(btnName1);
        a += btnName1.Size.Height + 2;
        btnName1.Click += BtnName1_Click;

我编写这段代码是为了制作一个新按钮。当我单击添加按钮时,此代码将运行,每次单击添加按钮时,我们都可以创建新按钮。 但我的问题是这个 如何为每个按钮设置点击句柄?我的意思是当我点击每个按钮时,他们会向我显示他们的文字 我写了这段代码来使文本不同:

btnName1.Text = textBox1.Text;

【问题讨论】:

  • 不清楚您的问题是什么。这段代码看起来不错。您无法使用此代码解决什么错误或问题?

标签: c# button handle


【解决方案1】:

您没有发布您的事件代码,但正如史蒂夫在他的评论中提到的(似乎已被删除),您可以使用 sender 参数来获取被点击的特定按钮。您应该追求以下内容:

private void BtnName1_Click(object sender, EventArgs e)
{
    //Access the text with: (sender as Button).Text

    //Example: Write this button's text to the debug output window
    Debug.WriteLine((sender as Button).Text);
}  

请注意,在我的具体示例中,您只是订阅了 Button 到此事件。

【讨论】:

    【解决方案2】:

    首选的方式是你到目前为止所放的

    btnName1.Click += BtnName1_Click;
    
    ...
    
    private void BtnName1_Click(object sender, EventArgs e) { 
      // Button which has been clicked 
      Button button = sender as Button;
      //TODO: put relevant code here
      ...
    }
    

    但是,您可以为每个按钮分配其自己的事件处理程序:

    btnName1.Click += (s, e) => {
      Button button = s as Button;
      //TODO: put relevant code here
      ...
    };
    

    【讨论】:

    • 有趣。为每个按钮分配一个单独的事件看起来很整洁:)
    • @DangerZone:有时它很有用:所有按钮的代码(它的标题、位置等以及事件处理程序)都在一个地方。该方法的缺点是您无法取消分配事件处理程序。
    • 啊,这很有道理...没有真正考虑取消分配。我想只要你不需要,这是一种非常简单的方法。 (我认为在大多数情况下都是这种情况)
    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多