#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 может наблюдаться различное поведение.