obsa1 Ответов: 3

Как вставить несколько ip-адресов в текстовое поле?


как можно ввести более двух ip-адресов в одно текстовое поле управления с помощью c#(с форматом ip-адреса)

Что я уже пробовал:

я могу вставить один ip-адрес.

#realJSOP

Показать.Нас.Ваш.Код.

Bryian Tan

Это приложение Windows Forms?

3 Ответов

Рейтинг:
2

OriginalGriff

MyTextBox.Text = "192.168.0.1";
MyTextBox.Text += ",";
MyTextBox.Text += "65.39.148.34";


#realJSOP

У меня есть метод расширения, который принимает IEnumerable коллекция (строк), которая создает одну строку с разделителями из значений в списке.

Рейтинг:
1

RickZeeland

Возможно, вы можете использовать этот форматированный элемент управления ip textbox: Управление IP-адресом C# [^]
Если вам нужно несколько ip-адресов, вы можете использовать более одного элемента управления или адаптировать его по своему вкусу ...


Рейтинг:
0

#realJSOP

Бросьте коллекцию строк в один из этих двух методов расширения, а затем установите MyTextBox.Текст к возвращаемому значению.

public static class Extender
{
    public static string Delimited(this IEnumerable<string> list, string separator)
    {
        // sanity check to make sure separator has been specified. If you don't care, comment out 
        // this statement. If you're rather throw an exception, change the code appropriately.
        separator = (string.IsNullOrEmpty(separator)) ? "," : separator;
      
        StringBuilder result = new StringBuilder();
        foreach (string item in list)
        {
            result.AppendFormat("{0}{1}", (result.Length == 0) ? "" : separator, item);
        }
        return result.ToString();
    }

    public static string Delimited(this IEnumerable<string> list, char separator)
    {
        return list.Delimited(separator.ToString());
    }
}


Пример использования:

string[] stringArray = new string[] { "1", "2", "3" };
List<string> stringList = new List<string>() { "4", "5", "6" };

string x = stringArray.Delimited(",");
string y = stringList.Delimited(';');


Вы можете дополнительно изменить методы, чтобы принять любой тип, включая сложные типы, и даже указать, какое свойство в объекте должно быть разделено. Я оставляю это как упражнение для программиста.

Ах, черт возьми, я дам вам и общую версию тоже. Имейте в виду, что если вы бросите в эти версии метода что-либо, кроме встроенных типов, вы получите обратно только имя класса (если, конечно, ваш объект не переопределяет имя класса). ToString() метод).

public static string Delimited<T>(this IEnumerable<T> list, string separator)
{
    StringBuilder result = new StringBuilder();
    foreach (T item in list)
    {
        result.AppendFormat("{0}{1}", (result.Length == 0) ? "" : separator, item.ToString());
    }
    return result.ToString();
}

public static string Delimited<T>(this IEnumerable<T> list, char separator)
{
    return list.Delimited(separator.ToString());
}


Если вы хотите по-настоящему увлечься сложными объектами, вы можете либо использовать отражение для изучения свойств объекта и выполнить всю неприятную рекурсию, необходимую для обработки вложенных сложных объектов, либо просто десериализовать объект в формат json и повторить свойства таким образом.

Программирование-это весело!


Richard Deeming

Если вы используете последнюю версию .NET, вы можете упростить эти методы расширения:

public static string Delimited<T>(this IEnumerable<T> list, string separator = ",")
{
    return string.Join(separator, list);
}

public static string Delimited(this IEnumerable<string> list, string separator = ",")
{
    return string.Join(separator, list);
}