brockeu Ответов: 2

Как сделать список страниц


я хочу сделать 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

когда я изменяю размер, мне снова приходится сортировать страницы, и это занимает так много времени.

2 Ответов

Рейтинг:
0

Patrice T

Вы должны подробно объяснить, что вы хотите сделать, потому что

Цитата:
я хотел бы, чтобы он мог открывать файлы размером 10 Мб или больше.
нереальный.
Все, что имеет такой файл, будет slooooow.