如何与来自 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;