Как сделать список страниц
я хочу сделать Textviewer. это показывает две страницы. как книга!!
поэтому я хочу знать. как сделать страницу (string[] array или list).
и я хочу использовать graphics. drawstring или textrenderer. не управление текстовым полем.
потому что я уже использую его с textbox. но это слишком медленная загрузка и изменение размера.
у меня здесь хорошая цель 책보는 프로그램 - 별북 ( 1.5 정식 ) :: 제이드민
я хотел бы, чтобы он мог открывать файлы размером 10 Мб или больше.
дайте мне знать ваше ноу-хау.
Что я уже пробовал:
я уже делаю это, но это медленно. я использовал управление текстовым полем.
когда я изменяю размер wordwrap, это меняет весь текст. и придется сделать так, чтобы страница переиндексировала весь текст.
это занимает так много времени.
дай мне совет.
ладно, я думаю, что мой вопрос плохой.
я хочу, чтобы этот код был быстрым
string filetxt = string.Empty; private void toolStripButton2_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Textfile|*.txt"; string filename = string.Empty; if (DialogResult.OK == ofd.ShowDialog()) { filename = ofd.FileName; filetxt = File.ReadAllText(filename, System.Text.Encoding.GetEncoding(51949)); Graphics aa = CreateGraphics(); SizeF sizefl = new SizeF(panel1.Width - 20, panel1.Height - 20); StringFormat stf = new StringFormat(StringFormatFlags.LineLimit); int charactersfitted; int linesfilled; //find max lines string bbb = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; SizeF sf = aa.MeasureString(bbb, new Font("굴림", 12), sizefl, stf, out charactersfitted, out linesfilled); int maxlines = linesfilled; charactersfitted = 0; linesfilled = 0; int indexofchar = 0; int page = 0; while (true) { if (indexofchar < filetxt.Length - 10000) { string aaa = filetxt.Substring(indexofchar, 10000); SizeF sfefs = aa.MeasureString(aaa, new Font("굴림", 12), sizefl, stf, out charactersfitted, out linesfilled); indexofchar += charactersfitted; pages[page] = aaa.Substring(0, charactersfitted); page++; } else { break; } } hScrollBar1.Maximum = page; Invalidate(); Refresh(); } } private void panel1_Paint(object sender, PaintEventArgs e) { Rectangle rect = new Rectangle(10, 10, panel1.Width - 20, panel1.Height - 20); e.Graphics.DrawRectangle(new Pen(Color.Black), rect); StringFormat stf = new StringFormat(StringFormatFlags.LineLimit); e.Graphics.DrawString(pages[pagesval], new Font("굴림", 12), new SolidBrush(Color.Black), rect, stf); } string[] pages = new string[100000]; int pagesval = 0; private void hScrollBar1_ValueChanged(object sender, EventArgs e) { pagesval = hScrollBar1.Value; Invalidate(); Refresh(); }
Patrice T
А у вас есть вопрос ?
njammy
брокеу хочет знать альтернативу элементам управления рендерингом макета текста / чертежа базовому текстовому полю.
Patrice T
Я думаю, что его проблема заключается в том, что "я хотел бы, чтобы он мог открывать файлы размером 10 Мб или больше."
А это нереально.
njammy
brockeu, ppolymorphe имеет хорошую точку зрения, подумайте о частичной загрузке файла или контента для лучшей производительности с подходящим выбором элементов управления.
brockeu
когда я изменяю размер, мне снова приходится сортировать страницы, и это занимает так много времени.