Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zrobić nowe zaznaczenie w ListView typu windows explorer ?


Rekomendowane odpowiedzi

Opublikowano

Jak zrobić by po najechaniu na item w ListView item podświetlał się na niebiesko?

 

I jeszcze jedno, jak zrobić by po na kliknięciu na item w textboxie program napisał podpis itemu, który pod nim jest?

Opublikowano

Item w textboxie? chodzi ci o to by text z Txtboxa1 wszkoczył na txtbox2?

-edit

 

  Private Sub ListView1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseMove
        Dim currentItem As ListViewItem = ListView1.GetItemAt(e.X, e.Y)
        For Each item As ListViewItem In ListView1.Items
            item.Selected = False
        Next
        If currentItem IsNot Nothing Then
            currentItem.Selected = True
        End If
    End Sub
Opublikowano

Oj stary ale kombinujesz ;D. W kodzie który ci podałem samo najechanie na obiekt go zaznacza, tak więc drugi raz tego samego raczej nie zaznaczysz.

Opublikowano

o.O  Czytałeś co ci napisałem?
Jak się uprzesz to możesz kombinować z tym http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.multiselect(v=vs.110).aspx
Ale wątpię że uda ci się zrobić ten niebieski efekt wizualny. Może jest coś o czym nie wiem, musi się wypowiedzieć ktoś bardziej doświadczony.

Opublikowano

Jeżeli chodzi ci o takie zaznaczenie to musisz się posłużyć funkcjami do rysowania. Kodu dokładnego ci nie podam, ale łap parę potrzebnych funkcji:

 

 http://msdn.microsoft.com/en-us/library/cc488183.aspx

i

Imports System.Drawing
'Zmienne
    Dim G As Graphics
    Dim BBG As Graphics
    Dim BB As Bitmap
    Dim r As Rectangle
'Ładowanie objektów
G = Me.CreateGraphics()
BB = New Bitmap(Me.Width, Me.Height)
'Petla
Do While CzyZaznacza = True
'Tutaj zrob if (sprawdzanie czy LPM jest wcisniety)
  CzyZaznacza = false
'Rysowanie
       DrawGraphics()
Loop

'Funkcja DrawGraphics()
 Private Sub DrawGraphics()
  r = New Rectangle(x,y,wielkoscx,wielkoscy) 'Tu zrob jakies matematyczne obliczenia na wielkosc
  G.FillRectangle(Brushes.BurlyWood, r)
  G.DrawRectangle(Pens.Black, r)
  G.Clear(Color.Wheat) 'Czyszczenie starej warstwy 

I musisz zrobić w sumie 5 zmiennych: xPoczatkowe, yPoczatkowe, xAktualne, yAktualne, CzyZaznacza (boolean)

Potem robisz zdarzenie które wykrywa kliknięcie. Ono ustawia x i y Poczatkowe na pozycje kursora i  CzyZaznacza na true. Potem robisz pętlę While, której warunkiem jest CzyZaznacza = true. I w tej pętli robisz: ustawienie x i y Aktualne na aktualną pozycję kursora, czyszczenie narysowanych prostokątów, rysowanie prostokątu od x i y Poczatkowego do x i y Aktualnego, i sprawdzenie czy LPM jest wciśnięty. Jeżeli nie - CzyZaznacza = false (co zakończy pętle). Mam nadzieję, że pomogłem. W razie pomocy pisz na PW

 

EDIT: Pamiętaj, żeby rysowany prostokąt miał przezroczystość około 50-60%, zależnie od koloru.

Opublikowano

Takie coś?

Imports System.Drawing
Public Class Form1
    Dim G As Graphics
    Dim BBG As Graphics
    Dim BB As Bitmap
    Dim r As Rectangle
    Dim x = x
    Dim y = y
    Dim wielkoscx = Height
    Dim wielkoscy = Width
    Dim CzyZaznacza = ListView1.SelectedItems
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        G = Me.CreateGraphics()
        BB = New Bitmap(Me.Width, Me.Height)
    End Sub
    Private Sub Pentla()
        CzyZaznacza = True
    End Sub
    Private Sub ListView1_DrawItem(sender As Object, e As DrawListViewItemEventArgs) Handles ListView1.DrawItem
        Pentla()
    End Sub
    Private Sub DrawGraphics()
        r = New Rectangle(x, y, wielkoscx, wielkoscy) 'Nie wiem jakie działania matematyczne mam wykonać
        G.FillRectangle(Brushes.BurlyWood, r)
        G.DrawRectangle(Pens.Black, r)
        G.Clear(Color.Wheat)
    End Sub
    Private Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown
        CzyZaznacza = False
    End Sub
End Class

Dobrze jest ?

O jakie działania matematyczne ci chodzi ?

Opublikowano

Początkową definicja CzyZaznacza mi coś nie pasuje. Zrób zwykłego booleana, bez tego "ListView1.SelectedItems". Czyli:

Dim CzyZaznacza As Boolean = false

Definiujesz to przed załadowaniem się programu, więc nie ma opcji, żeby ktoś zanim go uruchomił miał zaznaczone jakieś wartości.

Co do obliczeń:

Mamy x i y 1 kliknięcia oraz x i y aktualnej pozycji myszy.

Podać musimy jakieś koordynaty i wielkość. Wielkość x = xAktualne - xPoczatkowe (lub na odwrot). To samo z y. w pewnych przypadkach wielkość będzie na minusie, nie jestem pewny czy to nie zepsuje programu, ale spróbuj. Jak wywali błąd to zrób wartość bezwzględną liczby (w bibliotece z matematyką powinno być).

 

Zmień jeszcze kolorki, ja ci podałem z mojego projektu (czarna obramówka, drzewne wypełnienie i beżowe tło).

 

No i jeszcze CzyZaznacza = true robi się na DrawItems, nie ma tam zdarzenia MouseUp i MouseDown? Jak jest to zamień

 

I nie o to mi chodziło z tą pętlą. Zrób timer co 1ms, w którym robisz DrawGraphics()

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...