Nano Hash - криптовалюты, майнинг, программирование

Как динамически изменять высоту метки в Windows Mobile 6.5

В моем приложении я получаю текст с сервера, длина которого неизвестна. Может кто-нибудь дать представление о том, как изменить высоту метки, чтобы текст не обрезался, если он больше, чем длина метки.


Ответы:


1

Используя решение ctacke, принятое к вопросу (постоянная ширина метки):

protected override void OnPaint(PaintEventArgs e)
{
    if (NewLabelText != null)
    {
        //get the width and height of the text
        var size = e.Graphics.MeasureString(NewLabelText, label1.Font);
        if(size.Width>label1.Width){
            //how many lines are needed to display the text
            int iLines = (int)(System.Math.Round((size.Width / label1.Width)+.5));
            //multiply with using the normal height of a one line text
            //label1.Height=iLines*label1.PreferredHeight; //preferredHeight not supported by CF
            label1.Height=(int)(iLines*size.Height*1.1); // add some gutter
        }
        label1.Text = NewLabelText;
        NewLabelText = null;
    }

    base.OnPaint(e);
}

Я не смог проверить это с CF. Возможно, PreferredHeight недоступен в CF, если это так, используйте вместо этого label1.height.

23.12.2012
  • У меня несколько строк, но я столкнулся с одной проблемой. Если я набираю длинную строку без пробела, текст не переносится. например: dddddddddddddddddd - будет вырезано. Есть ли способ вручную проверить и нарисовать персонажа на экране. 24.12.2012
  • Когда вы хотите начать собственный перенос текста, вы собираетесь реализовать свой собственный рисунок. Я бы предпочел использовать TextBox и предлагать пользователю полосу прокрутки вместо запуска собственного переноса текста. Что должен думать пользователь, когда он видит долгий срок, разбитый на строки, например: ‹br/› \MyVeryLongSubdirPathName ‹br/›, отображаемый как \MyVeryLong<br/> SubDirPa<br/> thName ‹br/›? (проклятый, в комментариях нет поддержки разрыва строки) 25.12.2012

  • 2

    Используйте 1_. Вот упрощенный пример:

    public class MyForm : Form
    {
        private string m_text;
    
        public string NewLabelText 
        { 
            get { return m_text; }
            set 
            {
                 m_text = value;
                 this.Refresh();
            }
        }
    
        protected override void OnPaint(PaintEventArgs e)
        {
            if (NewLabelText != null)
            {
                var size = e.Graphics.MeasureString(NewLabelText, label1.Font);
                label1.Width = (int)size.Width;
                label1.Height = (int)size.Height;
                label1.Text = NewLabelText;
                NewLabelText = null;
            }
    
            base.OnPaint(e);
        }
    }
    
    22.12.2012
  • Но этот код меняет ширину и высоту. Как насчет изменения только высоты (добавить «строку»), задайте вопрос, в котором указано, что ширина должна оставаться такой же? 23.12.2012
  • Добавление переноса строк - это совсем другая история - ОП не просил об этом. Если это то, что нужно, у меня есть решение и для этого, но в основном это требует создания вашего собственного элемента управления и обработки рисования текста вручную. Несложный, но совершенно другой ответ, чем просто проверка размера. 23.12.2012
  • @ctacke в вашем решении label1.Width получает значение, превышающее ширину мобильного устройства, в результате текст снова обрезается. Если я использую решение josef, у меня несколько строк, но я столкнулся с одной проблемой. Если я набираю длинную строку без пробела, текст не переносится. например: dddddddddddddddddd - будет вырезано. Похоже, создание собственного элемента управления может решить мою проблему. Не могли бы вы опубликовать этот код? 24.12.2012
  • Если в нем нет пробелов и шрифт не фиксированной ширины, вам придется протестировать и уменьшить, чтобы получить нужное количество символов (wwwwww будет обрезаться иначе, чем lllllll). Вам нужно будет оценить среднюю ширину символа, обрезать в этой точке, а затем использовать MeasureString, чтобы проверить, подходит он или нет. 24.12.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..