我在POS c#应用程序中使用了极点显示(E POS)。我有两个主要问题, 我无法完美地清除显示屏。 2.我无法设置光标位置。
I used some dirty tricks to do these.But I am not satisfied with that code.The following code i used.
代码: -
class PoleDisplay : SerialPort
{
private SerialPort srPort = null;
public PoleDisplay()
{
try
{
srPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
if (!srPort.IsOpen) srPort.Open();
}
catch { }
}
~PoleDisplay()
{
srPort.Close();
}
//To clear Display.....
public void ClearDisplay()
{
srPort.Write(" ");
srPort.WriteLine(" ");
}
//Display Function
//'line' 1 for First line and 0 For second line
public void Display(string textToDisplay, int line)
{
if (line == 0)
srPort.Write(textToDisplay);
else
srPort.WriteLine(textToDisplay);
}
}
答案 0 :(得分:1)
发送十六进制代码0C以清除屏幕,它适用于大多数显示器
这是一个代码示例:
byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
答案 1 :(得分:0)
您的问题是您正在调用Write来清除第1行,而WriteLine则清除第2行。
这没有任何意义。这些方法之间的唯一区别是WriteLine在末尾添加了一个换行符。你真正做的就是输出这个字符串:
" "\r\n
在不知道您正在使用的杆式显示器的品牌的情况下,我无法告诉您正确的方法,但您尝试这样做的方式将永远不会奏效。大多数终端接受特殊字符代码来移动光标或清除显示。您是否找到了与您合作的终端的参考资料?如果你发送CHR(12),大多数显示都会清除。
除此之外,您的班级设计存在一个主要问题。你永远不应该依赖析构函数来释放C#中的资源。
在C#中,当垃圾收集器收集对象时将调用析构函数,因此没有确定的方法来知道何时收集和关闭资源(在本例中为Com端口)。
相反,在您的班级上实现IDisinterable接口。
这要求您在类中添加Dispose方法。这与当前的析构函数具有相同的目的。
通过这样做,您可以利用C#中的内置语言功能在对象超出范围时释放您的资源。
using (PoleDisplay p = new PoleDisplay())
{
// Do Stuff with p
}
// When the focus has left the using block, Dispose() will be called on p.