删除Console.Write方法写入的字符

时间:2012-04-02 09:33:36

标签: c# console-application

static void f_WriteIpAddresses()
{
    IPHostEntry host;
    string localIP = "?";
    host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (IPAddress ip in host.AddressList)
    {
        Console.Write(ip.ToString());
        Console.Write(" - ");
    }
}

static void Main(string[] args)
{
    Console.WriteLine("Your IP Address:")
    WriteIpAddresses();
    Console.Write("[You can delete/modify address]");
    string ip = Console.ReadLine();
}

我想在用户可以删除的行上找到所有地址并写入,直到正确的地址或修改该行。

c:\>address.exe
Your IP Address:
192.168.1.13 - 10.10.2.15 [You can delete/modify address]

2 个答案:

答案 0 :(得分:3)

查看这篇文章,它解释了如何清除部分控制台。这样,您还可以将控制台光标设置在您想要的位置,以便让用户覆盖控制台中的某些部分。见c-sharp-console-console-clear-problem

This post也可能非常方便,非常相似。

答案 1 :(得分:0)

您可以执行类似操作,例如在最后一个console.write的末尾放置一个\ r来将光标放在行的开头。

然后读取您的输入并将新输入与原始输出组合。由于您的readline仅读取新数据,因此您必须在原始数据中添加(覆盖)此新数据。

但是,只有在打印的线条长度小于控制台宽度时才会有效。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ConsoleApplication3
{
    class Program
    {
        static string f_WriteIpAddresses()
        {
            IPHostEntry host;
            string localIP = "?";
            string retVal = "";
            host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    Console.Write(ip.ToString());
                    Console.Write(" - ");
                    retVal = ip.ToString() + " - "; 
                }
            }
            return retVal;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Your IP Address:");
            string oldip = f_WriteIpAddresses();
            Console.Write("[You can delete/modify address]\r");
            string ip = Console.ReadLine();

            string newip = ip + oldip.Substring(ip.Length);
        }
    }
}

以上应该给出一个新的IP地址但有一些限制,例如,只适用于一行等。