C# 如何获取要在面板上拖动的按钮的名称

C# 如何获取要在面板上拖动的按钮的名称,c#,winforms,visual-studio,drag-and-drop,C#,Winforms,Visual Studio,Drag And Drop,我是C#和WinForm的新手,我在互联网上搜索过,但没有找到我想要的解决方案。如果有人能帮助我,那就太好了 这是我的问题- 我创建了一个类似上图的表单。有3个面板- 输入面板(它实际上包含一些按钮) 拖动面板(用户将按钮从“输入面板”拖动到此面板) 输出面板(它将从“拖动面板”中显示按钮的名称) 如果用户拖动多个按钮,则输出面板也会显示多个名称 var draugd=dragPanel.Controls 第()类 .Select(button=>button.Text); 尝试以下方法:

我是C#和WinForm的新手,我在互联网上搜索过,但没有找到我想要的解决方案。如果有人能帮助我,那就太好了

这是我的问题-


我创建了一个类似上图的表单。有3个面板-

  • 输入面板(它实际上包含一些按钮)
  • 拖动面板(用户将按钮从“输入面板”拖动到此面板)
  • 输出面板(它将从“拖动面板”中显示按钮的名称)

    • 如果用户拖动多个按钮,则输出面板也会显示多个名称
  • var draugd=dragPanel.Controls
    第()类
    .Select(button=>button.Text);
    
    尝试以下方法:

    private void UpdateLabel()
    {
        label1.Text = "";
        foreach (Control c in DragPanel.Controls)   //Going through all controls in the panel
        {
            if (c.GetType().Name == "Button")        // Checking whether the control is a Button
                label1.Text += Environment.NewLine+ ((Button)c).Text;     //Updating the label
        }
    }
    
    将按钮拖动到面板后,调用函数
    UpdateLabel()

    说明:

    此代码将选择DragPanel中的所有控件,如果它是一个按钮,则它将获取
    Text
    属性的值并附加到标签的新行中

    编辑:

    您可以将
    按钮
    替换为所需的控件名称(例如:
    文本框

    如果要获取面板中的所有控件,则可以执行以下操作:

    foreach (Control c in DragPanel.Controls) 
    {
          label1.Text += Environment.NewLine + c.Text;  
    }
    

    您可以通过.name属性获取拖动的按钮名称。字符串draggedName=draggedButton.Name;当且仅当Name属性是他想要的时,这才是真的。有些人寻找变量的名称,可能是不同的。。要达到这个目标,必须使用reflection@NikolayKostov:有什么需要解释的?此代码选择所有按钮(文本),然后您可以根据需要输出它…此代码不起作用,因为我无法找到此代码的用法。但谢谢你的回答,这很有效。但是,如果我想获得按钮以外的其他控件,我是否应该用(例如文本框)替换“按钮”?@RupamBhaduri:当然可以。您可以在那里使用任何控件名。如果要列出所有控件,则可以删除If语句。我会更新我的答案。请举个例子。那么,文本标签1.text+=Environment.NewLine+((按钮)c).text会工作吗?因为有((按钮)c)文本
    foreach (Control c in DragPanel.Controls)   
    {
        if (c.GetType().Name == "TextBox")     
        {
              label1.Text += Environment.NewLine + ((TextBox)c).Text;     
        }
    }
    
    foreach (Control c in DragPanel.Controls) 
    {
          label1.Text += Environment.NewLine + c.Text;  
    }