如何在私有静态无效函数中使用字符串值设置 WinForm 文本 属性
How to set a WinForm text property using string values in a private static void function
我正在尝试将一些第三方 C# 示例代码合并到我的程序中。第三方代码是扫描 COM 端口上的设备的 WinForms NET 4.6.2 应用程序的一部分。
就我而言,我想在方法 private static void PortStatusCallback()
中插入一行(或两行)代码。我添加的代码旨在用 PortStatusCallback()
中的一些变量值填充 Form1 上的一些文本框。完整的方法如下;我建议的添加是单行 myPortname.Text = portname;
。此添加 returns 错误消息 非静态字段、方法或 属性 需要对象引用 'Form1.myPortname'
谁能建议一种从静态方法访问字段的方法?我是 C# 编程的新手,所以如果你能为我写出代码,我将不胜感激。谢谢。
private DLL.PortStatusCallbackFuncPtr _PortStatusInstance = new DLL.PortStatusCallbackFuncPtr(PortStatusCallback); // Allocated to prevent garbage collection
private static void PortStatusCallback([MarshalAs(UnmanagedType.LPStr)] String portname, DLL.PortStatusTypes status, byte curScanAdr, byte maxScanAdr, byte foundType)
{
string statusMsg = "\r\nPortInfo Callback: " + portname + " status:" + status.ToString() + " curScanAdr:" + curScanAdr.ToString() + " maxScanAdr:" + maxScanAdr.ToString() + " foundType:" + foundType.ToString("X2");
myPortname.Text = portname; // this line is added by me and throws up a CS0120 error.
MyStatusBox.Invoke((MethodInvoker)delegate () { MyStatusBox.AppendText(statusMsg); });
Console.Write(statusMsg);
}
此答案假设您的 Form1
class 代表您申请的主要表格; class 的一个实例是在 Program.cs 中创建的,并且从未创建过其他实例,并且当您关闭表单时,该应用程序就会消失(即典型的 WinForms 应用程序)。
创建一个半私有属性:
Private static Form1 CurrentForm { get; private set; }
在 Form1 构造函数中(或在 Load
处理程序中),执行以下操作:
CurrentForm = this;
现在,表达式 Form1.CurrentForm
将解析为您的主窗体(从您应用程序的任何位置)。
最后将您出错的行更改为:
CurrentForm.myPortname.Text = portname;
尝试像这样使用 static modifier:
private static DLL.PortStatusCallbackFuncPtr _PortStatusInstance = new DLL.PortStatusCallbackFuncPtr(PortStatusCallback); // Allocated to prevent garbage collection
我正在尝试将一些第三方 C# 示例代码合并到我的程序中。第三方代码是扫描 COM 端口上的设备的 WinForms NET 4.6.2 应用程序的一部分。
就我而言,我想在方法 private static void PortStatusCallback()
中插入一行(或两行)代码。我添加的代码旨在用 PortStatusCallback()
中的一些变量值填充 Form1 上的一些文本框。完整的方法如下;我建议的添加是单行 myPortname.Text = portname;
。此添加 returns 错误消息 非静态字段、方法或 属性 需要对象引用 'Form1.myPortname'
谁能建议一种从静态方法访问字段的方法?我是 C# 编程的新手,所以如果你能为我写出代码,我将不胜感激。谢谢。
private DLL.PortStatusCallbackFuncPtr _PortStatusInstance = new DLL.PortStatusCallbackFuncPtr(PortStatusCallback); // Allocated to prevent garbage collection
private static void PortStatusCallback([MarshalAs(UnmanagedType.LPStr)] String portname, DLL.PortStatusTypes status, byte curScanAdr, byte maxScanAdr, byte foundType)
{
string statusMsg = "\r\nPortInfo Callback: " + portname + " status:" + status.ToString() + " curScanAdr:" + curScanAdr.ToString() + " maxScanAdr:" + maxScanAdr.ToString() + " foundType:" + foundType.ToString("X2");
myPortname.Text = portname; // this line is added by me and throws up a CS0120 error.
MyStatusBox.Invoke((MethodInvoker)delegate () { MyStatusBox.AppendText(statusMsg); });
Console.Write(statusMsg);
}
此答案假设您的 Form1
class 代表您申请的主要表格; class 的一个实例是在 Program.cs 中创建的,并且从未创建过其他实例,并且当您关闭表单时,该应用程序就会消失(即典型的 WinForms 应用程序)。
创建一个半私有属性:
Private static Form1 CurrentForm { get; private set; }
在 Form1 构造函数中(或在 Load
处理程序中),执行以下操作:
CurrentForm = this;
现在,表达式 Form1.CurrentForm
将解析为您的主窗体(从您应用程序的任何位置)。
最后将您出错的行更改为:
CurrentForm.myPortname.Text = portname;
尝试像这样使用 static modifier:
private static DLL.PortStatusCallbackFuncPtr _PortStatusInstance = new DLL.PortStatusCallbackFuncPtr(PortStatusCallback); // Allocated to prevent garbage collection