Дисплей пути в маркировке

Предложение окна rank позволяет вам ранжировать строки в соответствии с некоторым разделением, а затем вы можете просто выбрать верхние:

SELECT oDate, oName, oItem, oQty, oRemarks
FORM   (SELECT oDate, oName, oItem, oQty, oRemarks,
               RANK() OVER (PARTITION BY oName ORDER BY oDate DESC) AS rk
        FROM   my_table) t
WHERE  rk = 1

6
задан Community 10 September 2008 в 18:13
поделиться

5 ответов

Используйте TextRenderer. DrawText с TextFormatFlags. Флаг PathEllipsis

void label_Paint(object sender, PaintEventArgs e)
{
  Label label = (Label)sender;
  TextRenderer.DrawText(e.Graphics, label.Text, label.Font, label.ClientRectangle, label.ForeColor, TextFormatFlags.PathEllipsis);
}

Ваш код составляет 95% там. Единственная проблема состоит в том, что обрезанный текст оттянут сверху текста, который уже находится на маркировке.

Да благодарят, я знал об этом. Мое намерение было только для демонстрации использования DrawText метод. Я не знал, хотите ли Вы вручную создать событие для каждой маркировки или просто переопределить OnPaint() метод в наследованной маркировке. Спасибо за совместное использование Вашего конечного решения все же.

9
ответ дан 8 December 2019 в 14:49
поделиться

lubos hasko Ваш код составляет 95% там. Единственная проблема состоит в том, что обрезанный текст оттянут сверху текста, который уже находится на маркировке. Это легко решено:

    Label label = (Label)sender;
    using (SolidBrush b = new SolidBrush(label.BackColor))
        e.Graphics.FillRectangle(b, label.ClientRectangle);
    TextRenderer.DrawText(
        e.Graphics, 
        label.Text, 
        label.Font, 
        label.ClientRectangle, 
        label.ForeColor, 
        TextFormatFlags.PathEllipsis);
4
ответ дан 8 December 2019 в 14:49
поделиться

То, что Вы думаете на маркировке, - то, что она поместит..., если это будет длиннее, чем ширина (не набор к автоматическому размеру), но это было бы

c:\Documents and Settings\nick\My Doc...

Если бы существует поддержка, это, вероятно, было бы на классе Пути в Системе. IO

0
ответ дан 8 December 2019 в 14:49
поделиться

Не трудно для записи себя, хотя:

    public static string TrimPath(string path)
    {
        int someArbitaryNumber = 10;
        string directory = Path.GetDirectoryName(path);
        string fileName = Path.GetFileName(path);
        if (directory.Length > someArbitaryNumber)
        {
            return String.Format(@"{0}...\{1}", 
                directory.Substring(0, someArbitaryNumber), fileName);
        }
        else
        {
            return path;
        }
    }

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

3
ответ дан 8 December 2019 в 14:49
поделиться

Вы могли использовать Систему. IO.Path. Метод GetFileName и добавляет ту строку к сокращенной Системе. IO.Path. Строка GetDirectoryName.

0
ответ дан 8 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: