我习惯在访问vba中引用当前控件,如何在C#winform中这样做?
答案 0 :(得分:2)
您还可以使用表单的ActiveControl属性。
我使用了codekaizen的代码并将其放入一个表单以及一个计时器和几个控件(一个DataGridView,Panel,以及Panel中的Button和CheckBox)。在计时器的Tick事件中添加了此代码:
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = ActiveControl.Name;
label2.Text = GetFocusedControl().Name;
}
并且他们报告了与我从一个控件点击到另一个控件时相同的主动控件。
答案 1 :(得分:0)
我不确定是否有更好的方法,但P \ Invoke为我解决了这个问题:
private static Control GetFocusedControl()
{
Control focused = null;
var handle = GetFocusedControlHandle();
if (handle != IntPtr.Zero)
{
focused = Control.FromHandle(handle);
}
return focused;
}
// ...
[DllImport("user32.dll")]
private static extern IntPtr GetFocusedControlHandle();