/ / Czy można wyłączyć przewijanie w poziomie tylko w widoku listy? - vb.net, listview, scroll

Czy można wyłączyć przewijanie w poziomie tylko w widoku listy? - vb.net, listview, scroll

Zasadniczo, zastanawiam się, czy można wyłączyć przewijanie w poziomie, pozostawiając włączone przewijanie w pionie z widokiem listy w VB.NET bez konieczności tworzenia nowej klasy.

Czemu? Cóż, czysto estetycznie, mój listview ma obecnie niewielką przewagę poziomą, co nie jest warte wysiłku, aby stworzyć nową klasę właśnie do tego, chociaż jeśli można to zakodować bez zbytniego wysiłku, to bądź więcej niż chętny to zrobić.

PS: Pracuję w Windows Forms

Odpowiedzi:

2 dla odpowiedzi № 1

Często używam kontrolek ListView w widoku szczegółówz pojedynczą kolumną w celu zapewnienia listy funkcji "przeciągnij i upuść", której brakuje w kontrolce ListBox. ListView doskonale się do tego nadaje oprócz denerwującego zwyczaju przewijania w poziomie. Możliwe jest obejście tego w pewnym stopniu przez ustawienie szerokości kolumny na odpowiednią wartość (zwykle o 4 mniejsze niż szerokość ListView), ale to nie będzie dobrze wyglądać, jeśli zmiana wyglądu i działania zakończy się niepowodzeniem jeśli kontrolka zdecyduje się dodać pionowy pasek przewijania w czasie wykonywania.

Rozwiązaniem, z którego korzystam (i przyznam, że nie radzi sobie z każdą sytuacją) jest to. Najpierw skonfiguruj ListView z jedną kolumną (nazwa jest dowolna) i ukryj jej nagłówek:

lvList.View = View.Details
lvList.FullRowSelect = True
lvList.Columns.Add("ColName")
lvList.Columns(0).Width = lvList.ClientSize.Width
lvList.HeaderStyle = ColumnHeaderStyle.None

Następnie obsłuż zdarzenie ClientSizeChanged ListView i użyj go do ustawienia szerokości kolumny na szerokość obszaru roboczego (w zasadzie jest to obszar, który musi wypełnić treść listy):

Private Sub lvList_ClientSizeChanged(ByVal sender As Object, ByVal e As EventArgs) _
Handles lvList.ClientSizeChanged
If lvList.Columns.Count > 0 Then
lvList.Columns(0).Width = lvList.ClientSize.Width
End If
End Sub

Gdy zawartość listy zmienia się, a pionowy pasek przewijania jest dodawany lub usuwany, zdarzenie ClientSizeChange jest uruchamiane i dostosowuje szerokość kolumny, tak aby dokładnie wypełniała obszar klienta.