shaileshshinde Ответов: 1

Отображение строки с указателем курсора в текстовом поле и скрытие других строк в текстовом поле VB.NET


Есть ли какой-либо метод для отображения только одной строки текстового файла, который загружается в текстовое поле, когда курсор/клавиша вверх и вниз делается и скрывает другие строки, пока текущая строка выделена.

Пример:
Две строки текстового файла в текстовом поле являются:

абвгде
1234

когда курсор направлен на строку, содержащую "abcdef", то строка, содержащая "1234", которая является второй строкой текстового файла, должна быть скрыта, а когда курсор находится на второй строке, то первая и другие строки текстового поля должны быть скрыты

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

Частная суб методе form1_load(отправителя как объект, а равно EventArgs) обрабатывает ключевое слово mybase.Загрузить
Dim ReadSpciFile Как Массив
Тусклая линия как строка
ReadSpciFile = Файл.ReadAllLines("C:\Users\OM\Desktop\1 (3).txt")
строка = ReadSpciFile(0)
Richtextbox1 отображение.Текст = строка

Конец Подводной Лодки

выше код теперь показывает первую строку текстового файла из-за этого "line = ReadSpciFile(0)"
но я не могу загрузить/увидеть другие строки, когда я keydown/keyup событие

Maciej Los

Неверная мысль!

Думать об этом... Если вторая строка скрыта, то как можно переместить курсор по этой строке?

shaileshshinde

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

или любая другая идея, которую вы предлагаете для достижения такого рода поведения?

Maciej Los

Вы уже сами ответили на свой вопрос ;)

shaileshshinde

Да, верно. Но для кодирования этого метода я не получаю логики кодирования.

Ralf Meier

У вас неправильный подход.
Это поведение не является поведением, которое могло бы (или должно) быть реализовано с помощью (одного) TextBox - лучше вы создадите настраиваемый элемент управления, например UserControl, который состоит из 2 текстовых полей - теперь вы действительно можете переключаться между 2 обеими строками.

shaileshshinde

Я думаю, что это невозможно.

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

А текстовый файл может быть собран только в одном текстовом поле.

Итак, для этого в одном текстовом поле должно происходить только поведение.

Вот почему я не получаю логики для такого поведения.

Ralf Meier

Все возможно, если вы будете следовать правильному подходу.
Но я могу только вносить предложения и оказывать помощь. Решение, как это сделать, должно исходить от вас.

Текстовый файл может быть записан в одно текстовое поле или serverall - или в полный другой элемент управления. Если вы не можете получить логику, то вполне возможно, что вы не смогли бы найти ее, потому что нет никакого возможного решения таким образом.
Я предлагаю следующее :
- вы точно объясните, какова ваша цель
- ты сам подумай, куда идти
.. тогда вы (мы?), возможно, найдете решение ...

shaileshshinde

Моя цель такова:

Когда изображение загружается в picturebox и textfile загружается в textbox.

Тогда только одна строка строки текстового файла должна быть видна ,когда курсор направлен на эту строку, а другие строки текстового файла должны быть невидимы, и когда курсор/клавиша вверх, вниз делается на другой строке, эта строка должна быть видна.

Пример:

Если в текстовом файле есть две строки, то он загружается только в одно текстовое поле:

ABCDEFGHIJKLMNOP
1234567890

Когда курсор находится на строке № 1 "ABCDEFGHIJKLMNOP", то вторая строка должна быть невидимой, а когда курсор направлен на вторую строку, то первая строка должна быть невидимой.

Ralf Meier

ОК... Я не понимаю смысла этого ... но, как я уже писал, это невозможно сделать с помощью текстового поля.
Вам нужен элемент управления списком - либо готовый (как, например, DataGridView), либо самостроящийся (настроенный).
Так... каков теперь будет следующий шаг? ..

shaileshshinde

пожалуйста, взгляните на мой новый код.

В этом случае я могу видеть одну строку кода на событии загрузки.Сейчас работая.

Но теперь я хочу видеть другие строки одну за другой, когда keydown/keyup будет закончен

1 Ответов

Рейтинг:
1

Ralf Meier

Ссылаясь на дискуссию до сих пор я бы предложил следующее :
- при загрузке вашей формы (например) вы загружаете данные вашего текстового файла в массив (например, allready posted from you).
Также назначьте 1-й элемент массива вашему текстовому полю
Постройте индексную переменную (целое число), которая указывает на линию, которая уже видна
- теперь подключите событие KeyUp-Event из текстового поля к методу, в котором вы уменьшаете индексную переменную (и проверяете ее по границам массива).
Присвойте текстовому полю элемент массива, индексируемый этой переменной
- теперь подключите событие KeyDown-Event из текстового поля к методу, в котором вы увеличиваете индексную переменную (и проверяете ее на соответствие границам массива).
Присвойте текстовому полю элемент массива, индексируемый этой переменной

Dim ReadSpciFile As array
Dim Index as integer = 0

Private Sub Form1_Load (sender As Object, e As EventArgs) Handles MyBase.Load
Dim line As String
ReadSpciFile = File.ReadAllLines("C:\Users\OM\Desktop\1 (3).txt")
line = ReadSpciFile(0)
RichTextBox1.Text = line
End Sub

private sub DecreaseLine (sender As Object, e As EventArgs) Handles RichTextBox1.KeyUp
Index -= 1
if Index < 0 then Index = 0
line = ReadSpciFile(Index)
RichTextBox1.Text = line
end sub

private sub IncreaseLine (sender As Object, e As EventArgs) Handles RichTextBox1.KeyDown
Index += 1
if Index >= ReadSpciFile.length then Index = ReadSpciFile.length
line = ReadSpciFile(Index)
RichTextBox1.Text = line
end sub


Расширенное предложение :
Dim ReadSpciFile As array
Dim Index1 as integer = 0
Dim Index2 as integer = 0

Private Sub Form1_Load (sender As Object, e As EventArgs) Handles MyBase.Load
Dim line As String
ReadSpciFile = File.ReadAllLines("C:\Users\OM\Desktop\1 (3).txt")
line = ReadSpciFile(0)
RichTextBox1.Text = line
End Sub

private sub DecreaseLine1 (sender As Object, e As EventArgs) Handles RichTextBox1.KeyUp
Index1 -= 1
if Index1 < 0 then Index1 = 0
line = ReadSpciFile(Index1)
RichTextBox1.Text = line
end sub

private sub IncreaseLine1 (sender As Object, e As EventArgs) Handles RichTextBox1.KeyDown
Index1 += 1
if Index1 >= ReadSpciFile.length then Index1 = ReadSpciFile.length
line = ReadSpciFile(Index1)
RichTextBox1.Text = line
end sub

private sub DecreaseLine2 (sender As Object, e As EventArgs) Handles RichTextBox2.KeyUp
Index2 -= 1
if Index2 < 0 then Index2 = 0
line = ReadSpciFile(Index2)
RichTextBox2.Text = line
end sub

private sub IncreaseLine2 (sender As Object, e As EventArgs) Handles RichTextBox2.KeyDown
Index2 += 1
if Index2 >= ReadSpciFile.length then Index2 = ReadSpciFile.length
line = ReadSpciFile(Index2)
RichTextBox2.Text = line
end sub


shaileshshinde

Это работает .Но есть три проблемы:

1) он показывает только первые две строки текстового файла
2)Когда один раз keydown сделан и вторая строка направлена, и если мы хотим снова увидеть первую строку, то происходит следующее поведение:
Сразу же появляется вторая строка, как будто это строка по умолчанию, которая должна быть показана
3)строки отображаются только в одних и тех же текстовых полях. Я хочу показать его в разных текстовых полях с тем же поведением скрытия и отображения, что и в одном текстовом поле в соответствии с вашим приведенным выше кодом.

Ralf Meier

Хорошо ... большинство ваших комментариев должны быть решены самостоятельно - с помощью отладчика.

к 1) сколько строк имеет ваш текстовый файл ?
В конце Form1_Load (установите там точку останова) - каково содержимое и размер массива 'ReadSpciFile' ?
2) Здесь вы должны посмотреть с помощью отладчика, что происходит
до 3-х лет) Я не понимаю, что ты хочешь здесь делать. Пожалуйста, объясните !!!
В основном вам нужно иметь столько различных индексных переменных, сколько вы хотите использовать текстовые поля с таким поведением (каждое текстовое поле должно иметь свой собственный указатель индекса).
Кроме того, вы должны зацепить события из каждого текстового поля и направить их к методам, описанным выше. Но обратите внимание : если эти разные текстовые поля должны действовать по-разному, у вас должны быть разные методы для каждого текстового поля и каждого события. В качестве предложения для этого я добавляю пример к моему коду выше ...

shaileshshinde

текстовое поле содержит "n" строк.