Получить имя элемента Focused в C # - PullRequest
2 голосов
/ 02 октября 2011

Есть ли в C # функция, которая может возвращать имя элемента Focused и отображать его в текстовом поле или что-то еще?

Ответы [ 4 ]

7 голосов
/ 02 октября 2011

или вы можете сделать что-то вроде этого ...

  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();
      }
   }
 }
2 голосов
/ 02 октября 2011

Предполагая WinForms, вы можете найти активный (сфокусированный) элемент управления с помощью свойства Form.ActiveControl и получить имя.

В противном случае, если это проект WPF, вы можете использовать метод FocusManager.GetFocusedElement(), чтобы найти его.

0 голосов
/ 10 апреля 2019

Я только что обнаружил, что есть способ проще сделать это, если вы не используете вложенные элементы управления.Вы просто ссылаетесь

Form1.ActiveControl.Name
0 голосов
/ 02 октября 2011

эта функция вернет индекс сфокусированного элемента управления в форме

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...