/ / Превъртете през потребителски контрол, докато работи таймера - vb.net, winforms, combobox

Превъртете през потребителски контрол, докато таймерът работи - vb.net, winforms, combobox

Всеки път, когато щракнете върху областта на контрола на потребителя, той подчертава комбинираната кутия, правейки го така, че ако се опитам да превъртя до долната част на екрана, той преминава само през комбинираната кутия.

Опитах да пусна somelabel.focus() в събитието щракване за контрола на потребителя. Този вид работи. Това обаче не ми позволява да превъртам до част от контрола къде somelabel не се вижда, което ми се струва малко странно. Явно трябва да мога да превъртя докрай до дъното на usercontrol.

Допълнителна информация: Това е проект за winforms и потребителският контрол се изпълнява на таймер, където единствените контроли са combobox и няколко labels които имат своите .text свойство се актуализира всеки път, когато таймерът се завърта.

UPDATE: Опитах да деактивирам таймера и изглежда, че след като промених фокуса към един от етикетите, вече съм в състояние да превъртате до края на страницата. Така че изглежда проблемът му с таймера.

Ето някакъв код, който репликира проблема. Ако щракнете върху панела, той придобива фокус, но няма да ви позволи да превъртате с помощта на маховика. Той ще върне горната част на панела обратно в горната част на екрана. Ако не включите таймера обаче, можете свободно да превъртате.

Public i As Integer
Public iString As String

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
iString = i.ToString()
Label1.Text = iString
Label2.Text = iString
Label3.Text = iString
Label4.Text = iString
Label5.Text = iString
i += 1
End Sub

Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub

Private Sub Panel1_Click1(sender As Object, e As EventArgs) Handles Panel1.Click
Panel1.Focus()
End Sub

Отговори:

0 за отговор № 1

Бихте могли да добавите a Panel с Dock=Fill и AutoScroll=true в който вмъквате контролите си. След това добавете събитието за щракване на панела:

private void panel1_Click(object sender, EventArgs e)
{
this.ActiveControl = panel1;
}

По този начин, ако щракнете вътре в панела (което запълва цялото UserControl), панелът ще бъде активен и можете да превъртате. Това няма да повлияе на контролите вътре в панела, така че можете да работите с тях по обичайния начин.