Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Автоматическое сокращение строки с путем


Автор: opozdaika 29.7.2008, 17:05
Когда-то в Дельфи меня радовала возможность (не помню подробностей) автоматического сокращения длинной строки, содержащей путь к файлу, при ее отображении на форме. Не могу найти такое в C#. А именно: на форме есть label. В нее нужно вывести длииииииииинный пуууууть, а места, как всегда, мало. У label есть свойство AutoEllipsis, но оно не заточено под пути: ставит многоточие всегда В КОНЦЕ строки.
Фишка в том, что путь принято сокращать так, чтобы многоточие было В СЕРЕДИНЕ пути, а не в конце, чтобы бьло полностью видно ИМЯ файла. 
Например, вместо
Код

C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\bin\readme.txt

дельфийская приблуда сделала бы что-то типа:
Код

C:\...\bin\readme.txt

Есть ли такое в C#?

Автор: Necias 29.7.2008, 18:52
К сожалению, непосредственно такой функции я не нашел. Пришлось идти в обход))
Создай Windows Application, кинь label (имя стандартное - label1), AutoSize = false, Text = "" (обязательно, текст будет прорисовываться вручную). На событие label'a Paint вставь код
Код

            Brush brush = new SolidBrush(label1.ForeColor);
            float cyText = Font.GetHeight(e.Graphics);
            float cyRect = cyText;
            RectangleF rectf = new RectangleF(0, 0, label1.Width, cyRect);
            string str = "C:\grg\rgrg\rgrh\rhrh\rhrh.h";
            StringFormat strfmt = new StringFormat();


            strfmt.Trimming = StringTrimming.EllipsisPath;
            e.Graphics.DrawString(str,
                            Font, brush, rectf, strfmt);

Ключевой параметр - StringFormat.Trimming - при рисовании текст будет обработан и из СЕРЕДИНЫ будут выкинуты непомещающиеся символы
PS Извини, писал наспех, если что непонятно отпишись - как освобожусь кину подробный пример

Автор: opozdaika 30.7.2008, 12:57
Necias, у меня все получилось, спасибо!!!  smile  smile  smile 
Жаль, не могу сделать тебе +1 по причине своего низкого статуса. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)