如何与类中的winform上的文本框控件进行交互?

时间:2015-02-06 04:18:07

标签: c# .net

我正试图从项目中的类中获取表单文本框控件的句柄,类似于这种方法:

How to access Winform textbox control from another 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类中我有这个:

Form mainForm;
public InputDevice( IntPtr hwnd, Form frmMain )
{
   ... stuff ...
   mainForm = frmMain;
}

...最后,在我的一个功能中:

mainForm.Update???

Intellisense无法找到UpdateScanCode函数,尽管它找到了很多Form1的其他成员。当我尝试使用mainForm.UpdateScanCode()时,它将无法编译。

为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

您的InputDevice课程引用了基础Form课程,而不是您的Form1课程。因此,您的代码会进行编译,并且您可以从Form访问基础InputDevice课程中提供的任何内容,但您无法访问Form1特定的任何内容。

修改您的InputDevice课程,以引用Form1代替Form

Form1 mainForm;
public InputDevice( IntPtr hwnd, Form1 frmMain )
{
   ... stuff ...
   mainForm = frmMain;
}

甚至可能不需要将Form1的实例传递给InputDevice。如果" ScanCode"是InputDevice上的公共财产(至少有公共" getter"),您可以在Form1中使用此代码:

id.KeyPressed += delegate { txtScanCode.Text = id.ScanCode; };

或者扫描代码可能是通过该委托的事件参数传回的?

id.KeyPressed += (s, e) => txtScanCode.Text = e.ScanCode;