Onyebuchim Ответов: 1

Как узнать, когда конкретная строка отображается в приложении прокрутки


Мне нужна помощь в разработке логики в моем приложении скроллера, которая сделала бы его более изобретательным. Его дизайн разработан с vb.net 2012 год. Приложение имеет 2 метки. Один для прокрутки содержимого, а другой для отображения чего-то еще, например заголовка.

Текстовый файл содержит содержимое для разных разделов. См. пример текстового файла ниже:

ITD-05 / MAY / 17 1: 20 вечера - в компьютерном зале с 10 утра будет временное отключение сети для проведения ремонтных работ

HSE-01 / MAY / 17 1: 20 вечера-предупреждение о безопасности: продолжаются строительные работы на пешеходной дорожке. ПОЖАЛУЙСТА, НЕ ИСПОЛЬЗУЙТЕ ДОРОЖКУ, ЧТОБЫ ИЗБЕЖАТЬ ТРАВМ

Общие сведения-07 / Apr / 17 2: 00 вечера-государственные праздники запланированы на 1 октября 2017 года

Отличительная фраза помещается в начале каждого предложения, чтобы определить источник информации.

Приложение scroller извлекает информацию из текстового файла с помощью метода file.readalltext. См. код ниже

lblScroller.Text = File.ReadAllText(FILE_NAME).Replace(vbCr & vbLf, " ")


Затем код непрерывно прокручивает содержимое этикетки справа налево.

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

Например, приложение будет проверять, когда строка ОЗТОС свитки на дисплей, на другой этикетке будет меняться в вышку. Тогда пользователи будут знать,что скроллинг информации происходит из вышки. Когда строка GENERAL прокручивается, метка затем меняется на GENERAL, чтобы пользователи знали, что информация прокручивается из GENERAL.

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

Я учил использовать разные текстовые файлы для каждого раздела или отдела, но это не работало эффективно, потому что мне приходилось использовать таймеры для разных streamreaders для каждого текстового файла. Но если содержимое текстового файла велико, то таймер не позволит всему содержимому закончить прокрутку до того, как оно истечет, и вызовет следующий streamreader.

Я пробовал использовать метод "contains" для проверки уникальной фразы, и он всегда возвращает true, потому что streamreader загружает все содержимое файла в элемент управления label сразу.

Если бы я мог программно определить, когда фраза или слово просто прокручиваются с самого начала, то другая метка указывала бы источник информации.

Это похоже на обычную телевизионную станцию, прокручивающую новости с разными разделами. Например, когда прокручивается спортивная информация, метка в крайнем левом углу меняется на спортивную.

Ralf Meier

Вы много писали, но для меня непонятно, что вы хотите делать ... извините.
Я думаю, что необходимо улучшить ваш вопрос с помощью соответствующей кодовой части (используйте для этого функцию "улучшить вопрос" )

1 Ответов

Рейтинг:
10

CHill60

Я предполагаю, что у вас есть таймер для запуска прокрутки. Что-то вроде этого работает:

private string[] distinctivePhrases = {"HSE", "GENERAL"};
private void Form1_Load(object sender, EventArgs e)
{
    Scrll = -1;
    tmr = new Timer();
    tmr.Tick += TimerTick;
    tmr.Interval = 200;
    tmr.Start();
}
private void TimerTick(object sender, EventArgs e)
{
    var iLmt = ScrollString.Length - (Scrll++);
    if (iLmt < maxChars) Scrll = 0;

    lblScroller.Text = ScrollString.Substring(Scrll, maxChars);
    foreach (var phrase in distinctivePhrases.Where(phrase => lblScroller.Text.Contains(phrase)))
    {
        lblHeader.Text = phrase;
        break;
    }
}
Я предлагаю вам демаркировать отличительную фразу немного более отчетливо, например, префикс с "**", чтобы наличие слова" general " в тексте не вызывало изменения заголовка. Это также делает код для изменения заголовка немного проще
private void TimerTick(object sender, EventArgs e)
{
    var iLmt = ScrollString.Length - (Scrll++);
    if (iLmt < maxChars) Scrll = 0;

    var scrollText = ScrollString.Substring(Scrll, maxChars);
    lblScroller.Text = scrollText;

    if (!scrollText.StartsWith("**")) return;
    lblHeader.Text = scrollText.Substring(2, 
        scrollText.IndexOf(" ", StringComparison.InvariantCultureIgnoreCase) - 1);
}
Обратите внимание, что подстрока начинается с элемента [2], чтобы игнорировать"**".


Onyebuchim

Большое спасибо. Я попробую