Get the name of a Focused element in C #

Is there a function in C # that can return the name of a Focused element and display it in a text box or something else?

+2
source share
4 answers

or you can do something like this ...

  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();
      }
   }
 }
+7
source

Assuming WinForms, you can find the active (focused) control using the property Form.ActiveControland get the name.

Otherwise, if it is a WPF project, you can use the method FocusManager.GetFocusedElement()to find it.

+1
source

Focused

    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
0

I just found that there is a easier way to do this if you are not using nested controls. You are just a link

Form1.ActiveControl.Name
0
source

All Articles