c # Treeview Node с форматированным текстом, например, вкладки и новые строки - PullRequest
3 голосов
/ 19 ноября 2008

Возможно ли (с помощью стокового c # TreeView) иметь многострочные узлы дерева?

Также возможно добавить управляющие символы в текст TreeNode, например '\ Т'? Этот же эффект может быть достигнут путем добавления столбцов в TreeNode. это возможно?

Ответы [ 3 ]

2 голосов
/ 19 ноября 2008

Я не верю, что это возможно с помощью WinForms, по крайней мере без рисования ваших собственных узлов. Возможно, вы сможете использовать «нарисованный владельцем» триод, чтобы выполнить это в WinForms, хотя я не знаю.

Это изначально поддерживается WPF.

1 голос
/ 30 ноября 2008

Из вашего вопроса не очень понятно, используете ли вы ASP.NET или WinForms. Если вы находитесь в ASP.NET, вы можете попробовать использовать тег PRE для форматирования ...?

То, что сказано, Ra-Ajax TreeView, который вы можете увидеть на примере здесь , может иметь любое произвольное количество HTML и / или даже элементов управления внутри него, что в основном делает его намного лучше встроенного TreeView в ASP.NET. (Отказ от ответственности; я работаю с Ра-Аяксом)

Это позволяет вам форматировать содержимое TreeView именно так, как вы хотите. Хотя, если вы полностью впадаете в бешенство, вы все равно рискуете создать «артефакты дисплея» из-за слишком большого пространства или чего-то в этом роде ...

0 голосов
/ 21 апреля 2017

Невозможно эффективно использовать табулятор внутри TreeNode. В любом случае, у меня есть обходной путь:

Шрифт «Консолас» имеет одинаковое пространство для каждой буквы, поэтому вы можете легко пробелами. Метод GetEmptyInfoByIndex возвращает произвольную строку пробелов, чтобы заполнить пробел до указанной длины. Здесь = 20.

mynode.NodeFont = new System.Drawing.Font("Consolas", 9,FontStyle.Regular);

string displaytext = String.Format(CultureInfo.InvariantCulture, "{0}{2} = {1}", mystringOfDifferentLenght, myresult, GetEmptyInfoByIndex(mystringOfDifferentLength, 20));
mynode.Text = displaytext;
rootnode.Nodes.Add(mynode);

private string GetEmptyInfoByIndex(string _string, int maxLength)
    {
        string retstr = string.Empty;
        for (int i = 0; i < maxLength - _string.Length; i++)
        {
            retstr += " ";
        }
        return retstr;
    }

Доказательство здесь!

...