C#中是否有一个函数可以返回聚焦元素的名称并将其显示在文本框中?
答案 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;