我用极显示器(E POS)在我的POS C#application.I有两个主要问题, 1.我不能完全清除显示。 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);
    }

}  
有帮助吗?

解决方案

您的问题是,你在呼唤写操作清除1号线,和WriteLine清除2号线。

此不作任何意义。这些方法之间的唯一区别是,增加的WriteLine断行到最后。所有你真的做的是这样的输出字符串:

  "                                  "\r\n

不知道你的品牌所使用的杆显示器的,我不能告诉你正确的方式做到这一点,但你现在的样子试图做到这一点不会有任何效果。大多数终端接受特殊字符代码来移动光标,或清晰的显示。你有没有发现你正在使用的终端的参考?如果你给他们CHR(12)大多数显示器将清除。

所有这一切之外,还有与你的类设计的一大难题。你永远不应该依赖于C#析构函数释放资源。

在C#,析构函数将被当垃圾收集器收集的对象,所以没有知道当资源(在这种情况下的COM端口),将被收集并关闭确定的方式调用。

相反,实现你的类接口IDisposable的。

这需要你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.

其他提示

发送十六进制代码0℃至清屏,它适用于大多数显示器

这里是一个代码示例:

byte[] bytesToSend = new byte[1] { 0x0C }; // send hex code 0C to clear screen
srPort.Write(bytesToSend, 0, 1);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top