Добавление динамических элементов управления в форму с автоматической прокруткой

#c# #winforms #controls #scroll

#c# #winforms #элементы управления #прокрутка

Вопрос:

Когда я добавляю свои элементы управления в форму, все идет нормально, пока я не попытаюсь указать местоположение больше, чем int16.MaxValue . Элементы управления просто накладываются друг на друга. Вот код, который упрощен, но демонстрирует поведение:

 private void Form1_Load(object sender, EventArgs e)
{
    this.AutoScroll = true;
    int nexttop = 0;
    for (int i = 0; i < 500; i  )
    {
        TextBox t  = new TextBox();
        t.Text = i.ToString();
        t.Multiline = true;
        if (nexttop > Int16.MaxValue)
        {
            bool debug = true;
        }
        t.Location = new Point(0, nexttop);
        t.Size = new Size(100, 77);
        nexttop  = t.Height;
        this.Controls.Add(t);
    }
}
 

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

Есть ли у вас какие-либо идеи о том, как это исправить? TIA.

Комментарии:

1. Я запускаю ваш код и, кажется, работает нормально. В чем проблема?

2. Если вы прокрутите вниз до самого низа, будут видны только 425 текстовых полей. Да, я бы ожидал, по крайней мере, исключения при переполнении int.MinValue .

3. Но я вижу 499 в последнем текстовом поле: (

4. Я использую 64-разрядную версию Windows7. Серж говорит, что есть разные варианты поведения — что вы используете?

5. С чем это связано Int16.MaxValue ?

Ответ №1:

Это ограничение (32767) связано с GDI . Я полагаю, что в зависимости от версии Windows может наблюдаться различное поведение.