如何与来自 class 的 winform 上的文本框控件进行交互?
How to interact with textbox control on winform from class?
我正在尝试从项目中的 class 获取表单的文本框控件的句柄,类似于此方法:
How to access Winform textbox control from another class?
我就是无法让它工作。在我的表格中 class 我有这个:
public Form1()
{
InitializeComponent();
id = new InputDevice(Handle, this);
id.KeyPressed += new InputDevice.DeviceEventHandler(m_KeyPressed);
}
public void UpdateScanCode(string scanCode)
{
txtScanCode.Text = scanCode;
}
然后在我的 InputDevice class 我有这个:
Form mainForm;
public InputDevice( IntPtr hwnd, Form frmMain )
{
... stuff ...
mainForm = frmMain;
}
...最后,在我的一个函数中:
mainForm.Update???
Intellisense 找不到 UpdateScanCode 函数,尽管它找到了 Form1 的许多其他成员。当我尝试 mainForm.UpdateScanCode() 时,它不会编译。
为什么这行不通?
您的 InputDevice
class 引用的是基础 Form
class,而不是扩展它的 Form1
class。因此,您的代码可以编译,并且您可以从 InputDevice
访问基础 Form
class 上的任何可用内容,但您无法访问特定于 Form1
.[=26= 的任何内容]
修改您的 InputDevice
class 以引用 Form1
而不是 Form
。
Form1 mainForm;
public InputDevice( IntPtr hwnd, Form1 frmMain )
{
... stuff ...
mainForm = frmMain;
}
甚至可能不需要将 Form1
的实例传递给 InputDevice
。如果 "ScanCode" 是 InputDevice
上的 public 属性(至少有 public "getter"),您可以在 Form1
而不是:
id.KeyPressed += delegate { txtScanCode.Text = id.ScanCode; };
或者也许扫描码是通过该委托的事件参数传回的?
id.KeyPressed += (s, e) => txtScanCode.Text = e.ScanCode;
我正在尝试从项目中的 class 获取表单的文本框控件的句柄,类似于此方法:
How to access Winform textbox control from another class?
我就是无法让它工作。在我的表格中 class 我有这个:
public Form1()
{
InitializeComponent();
id = new InputDevice(Handle, this);
id.KeyPressed += new InputDevice.DeviceEventHandler(m_KeyPressed);
}
public void UpdateScanCode(string scanCode)
{
txtScanCode.Text = scanCode;
}
然后在我的 InputDevice class 我有这个:
Form mainForm;
public InputDevice( IntPtr hwnd, Form frmMain )
{
... stuff ...
mainForm = frmMain;
}
...最后,在我的一个函数中:
mainForm.Update???
Intellisense 找不到 UpdateScanCode 函数,尽管它找到了 Form1 的许多其他成员。当我尝试 mainForm.UpdateScanCode() 时,它不会编译。
为什么这行不通?
您的 InputDevice
class 引用的是基础 Form
class,而不是扩展它的 Form1
class。因此,您的代码可以编译,并且您可以从 InputDevice
访问基础 Form
class 上的任何可用内容,但您无法访问特定于 Form1
.[=26= 的任何内容]
修改您的 InputDevice
class 以引用 Form1
而不是 Form
。
Form1 mainForm;
public InputDevice( IntPtr hwnd, Form1 frmMain )
{
... stuff ...
mainForm = frmMain;
}
甚至可能不需要将 Form1
的实例传递给 InputDevice
。如果 "ScanCode" 是 InputDevice
上的 public 属性(至少有 public "getter"),您可以在 Form1
而不是:
id.KeyPressed += delegate { txtScanCode.Text = id.ScanCode; };
或者也许扫描码是通过该委托的事件参数传回的?
id.KeyPressed += (s, e) => txtScanCode.Text = e.ScanCode;