如何在 C# Windows 应用程序中修复 "the name ... does not exist in the current context error"?
How to fix "the name ... does not exist in the current context error" in a C# Windows Application?
前段时间我制作了一个简单的 C# 应用程序(作为控制台应用程序),现在我正在制作一个新版本作为 Sharpdevelop 中的 Windows 应用程序。我是 C# 和图形应用程序的新手,我遇到了这个令人困惑的错误。
我想做的:在 UI 上,我有一个按钮,用于检查 COM3 串口是否打开,如果没有打开,如果打开,关闭它并写一条关于它的消息在列表框上。问题是无论我把串行处理部分放在什么地方,我都会收到关于它不在当前上下文中的错误,或者收到 "Object reference not set to an instance of an object" 错误。
我用 Sharpdevelop 的模板创建了应用程序,所以我在几个文件中有代码:
Program.cs:
using System;
using System.Windows.Forms;
namespace SerialClient_v2
{
class Program
{
[STAThread]
void Main(string[] args)
{
SerialHandle SH=new SerialHandle();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(SH));
}
}
}
Mainform.cs:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerialClient_v2
{
public partial class MainForm : Form
{
private SerialHandle _sh;
public MainForm(SerialHandle sh)
{
InitializeComponent();
_sh = sh;
}
void ConnectBtnClick(object sender, EventArgs e)
{
try{
if(_sh._serialPort.IsOpen){
listBox1.Items.Add(DictionaryClass.strDisconnecting);
//Program._serialPort.Close();
}
else{
//Program._serialPort.Open();
listBox1.Items.Add(DictionaryClass.strConnecting);
}
}
catch (Exception ex)
{
listBox1.Items.Add("Error opening/writing to serial port :: " + ex.Message);
}
}
}
}
SerialHandle.cs:(这是我的文件,以前在控制台应用程序的 Main 函数中的东西都在这里。DictionaryClass 只是一个翻译,帮助 class 在两个之间轻松切换语言)
using System;
using System.IO.Ports;
namespace SerialClient_v2
{
public class SerialHandle
{
bool SerialComm;
public SerialPort _serialPort;
public SerialHandle()
{
SerialPort _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
_serialPort.ReadTimeout = 1000;
_serialPort.Open();
}
}
public static class DictionaryClass{
//DICTIONARY:
public static string strConnecting="Initializing serial communication!";
public static string strDisconnecting="Closing serial port";
}
}
问题是 SH._serialPort.IsOpen 无法检查,因为它不在上下文中。 SH 是在 Main 函数中创建的,所以我不明白为什么没有看到它。抱歉初学者问题。
只需将初始化语句SerialHandle SH=new SerialHandle();
移动到MainForm.csclass
最简单的解决方案是将 SH 对象实例传递给主窗体:
在SerialHandle.cs中(使用_sh._serialPort.IsOpen)
:
private SerialHandle _sh;
public MainForm(SerialHandle sh)
{
_sh = sh;
}
在Program.cs中:
Application.Run(new MainForm(SH));
前段时间我制作了一个简单的 C# 应用程序(作为控制台应用程序),现在我正在制作一个新版本作为 Sharpdevelop 中的 Windows 应用程序。我是 C# 和图形应用程序的新手,我遇到了这个令人困惑的错误。
我想做的:在 UI 上,我有一个按钮,用于检查 COM3 串口是否打开,如果没有打开,如果打开,关闭它并写一条关于它的消息在列表框上。问题是无论我把串行处理部分放在什么地方,我都会收到关于它不在当前上下文中的错误,或者收到 "Object reference not set to an instance of an object" 错误。
我用 Sharpdevelop 的模板创建了应用程序,所以我在几个文件中有代码:
Program.cs:
using System;
using System.Windows.Forms;
namespace SerialClient_v2
{
class Program
{
[STAThread]
void Main(string[] args)
{
SerialHandle SH=new SerialHandle();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(SH));
}
}
}
Mainform.cs:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerialClient_v2
{
public partial class MainForm : Form
{
private SerialHandle _sh;
public MainForm(SerialHandle sh)
{
InitializeComponent();
_sh = sh;
}
void ConnectBtnClick(object sender, EventArgs e)
{
try{
if(_sh._serialPort.IsOpen){
listBox1.Items.Add(DictionaryClass.strDisconnecting);
//Program._serialPort.Close();
}
else{
//Program._serialPort.Open();
listBox1.Items.Add(DictionaryClass.strConnecting);
}
}
catch (Exception ex)
{
listBox1.Items.Add("Error opening/writing to serial port :: " + ex.Message);
}
}
}
}
SerialHandle.cs:(这是我的文件,以前在控制台应用程序的 Main 函数中的东西都在这里。DictionaryClass 只是一个翻译,帮助 class 在两个之间轻松切换语言)
using System;
using System.IO.Ports;
namespace SerialClient_v2
{
public class SerialHandle
{
bool SerialComm;
public SerialPort _serialPort;
public SerialHandle()
{
SerialPort _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
_serialPort.ReadTimeout = 1000;
_serialPort.Open();
}
}
public static class DictionaryClass{
//DICTIONARY:
public static string strConnecting="Initializing serial communication!";
public static string strDisconnecting="Closing serial port";
}
}
问题是 SH._serialPort.IsOpen 无法检查,因为它不在上下文中。 SH 是在 Main 函数中创建的,所以我不明白为什么没有看到它。抱歉初学者问题。
只需将初始化语句SerialHandle SH=new SerialHandle();
移动到MainForm.csclass
最简单的解决方案是将 SH 对象实例传递给主窗体:
在SerialHandle.cs中(使用_sh._serialPort.IsOpen)
:
private SerialHandle _sh;
public MainForm(SerialHandle sh)
{
_sh = sh;
}
在Program.cs中:
Application.Run(new MainForm(SH));