/ / Przewiń kontrolkę użytkownika podczas działania licznika czasu - vb.net, winforms, combobox

Przewiń kontrolę użytkownika, gdy timer działa - vb.net, winforms, combobox

Za każdym razem, gdy klikam obszar kontroli użytkownika, podświetla kombi, co sprawia, że ​​jeśli spróbuję przewinąć do dołu ekranu, przewija się tylko kombi.

Próbowałem wkładać somelabel.focus() w zdarzeniu kliknięcia dla kontrolki użytkownika. Ten rodzaj działa. Nie pozwala mi to jednak przejść do części kontrolki, w której somelabel nie jest widoczny, co wydaje mi się trochę dziwne. Oczywiście muszę mieć możliwość przewijania do samego końca kontroli użytkownika.

Informacje dodatkowe: jest to projekt winForms, a kontrolka użytkownika działa na czasomierzu, gdzie jedynymi kontrolkami są combobox a niektóre labels które mają swoje .text właściwość aktualizowana za każdym razem, gdy zegar zapętla się.

AKTUALIZACJA:Próbowałem wyłączyć licznik czasu i wygląda na to, że po zmianie fokusu na jedną z etykiet mogę teraz przewijać całą stronę do samego dołu strony. Więc wydaje się, że jest to problem z zegarem.

Oto kod, który odtwarza problem. Jeśli klikniesz na panel, nabiera on ostrości, ale nie pozwala na przewijanie za pomocą kółka przewijania. Spowoduje to przywrócenie górnej części panelu na górę ekranu. Jeśli jednak nie włączysz timera, możesz swobodnie przewijać.

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

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz dodać Panel z Dock=Fill i AutoScroll=true w którym wstawiasz kontrolki. Następnie dodaj zdarzenie kliknięcia dla panelu:

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

W ten sposób, jeśli klikniesz wewnątrz panelu (który wypełni całość UserControl) panel będzie aktywny i będzie można przewijać. Nie wpłynie to na elementy sterujące wewnątrz panelu, więc możesz pracować z nimi w zwykły sposób.