在C#中获取Focused元素的名称

时间:2011-10-02 08:38:27

标签: c# winforms

C#中是否有一个函数可以返回聚焦元素的名称并将其显示在文本框中?

5 个答案:

答案 0 :(得分:7)

或者你可以做这样的事情......

  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
   public partial class Form1 : Form
   {
       public Form1()
       {
            InitializeComponent();            
       }

      private void button1_Click(object sender, EventArgs e)
      {

        MessageBox.Show(GetFocusControl());
      }

      [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
      internal static extern IntPtr GetFocus();

      private string GetFocusControl()
      {
        Control focusControl = null;
        IntPtr focusHandle = GetFocus();
        if (focusHandle != IntPtr.Zero)
            focusControl = Control.FromHandle(focusHandle);
        if (focusControl.Name.ToString().Length == 0)
            return focusControl.Parent.Parent.Name.ToString();
        else
            return focusControl.Name.ToString();
      }
   }
 }

答案 1 :(得分:2)

假设WinForms,您可以使用Form.ActiveControl属性找到活动(聚焦)控件并获取名称。

否则,如果这是一个WPF项目,您可以使用FocusManager.GetFocusedElement()方法来查找它。

答案 2 :(得分:0)

此函数将返回Form

中聚焦控件的索引
    private int GetIndexFocusedControl()
    {
        int ind = -1;
        foreach (Control ctr in this.Controls)
        {
            if (ctr.Focused)
            {
                ind = (int)this.Controls.IndexOf(ctr);
            }
        }
        return ind;
    }

当您找到聚焦控件的索引时,您可以访问此控件 来自控制集合

int indexFocused = GetIndexFocusedControl();
textBox1.Text = this.Controls[indFocused].Name; // access the Name property of control

答案 3 :(得分:0)

我刚刚发现,如果您不使用嵌套控件,则有一种更简便的方法。 您只是参考

Form1.ActiveControl.Name

答案 4 :(得分:0)

在c#中为我工作。

string name = ActiveForm.ActiveControl.Name;