drag & drop w listbox

0

Witam, mam pewien problem a mianowicie chodzi o to iż nie mam pojęcia jak to ugryźć. Znaczy, może inaczej. Wiem jak zaimplementować obsługę drag&drop w lisboxie, zaś problemem jest to, że gdy dodaję do tegoż listboxa pliki to wrzucam tam jedynie same nazwy a ścieżki zapisywane są stringliscie, więc teraz moje pytanie jest następujące. Jak to obsłużyć aby elementy z listboxa i stringlisty można było dragować i dropować wspólnie(w tym samym momencie aby miejsce zmieniał rekord w listboxie i stringliscie). Oczywiście przesuwać elementy wewnątrz listboxa. Troszkę pogmatwałem ale liczę, ze ktoś zrozumie i będzie w stanie mi pomóc. Pozdrawiam.

0
rydy102 napisał(a)

Troszkę pogmatwałem ale {...}

ano.
ale chyba wiem o co chodzi.
poszukaj w necie jak recznie sortowac itemy listboxa, uzywajac drag&drop. znajdziesz na pewno.
jak juz bedziesz mial kod, to w miejscu gdzie zamieniasz miejcami itemy listboxa, zmieniaj tez itemy stringlist.
chociaz jest lepsze rozwiazanie niz stosowanie dodatkowego stringlist. istnieje cos takiego jak ListBox.Items.Objects - poczytaj o tym, na pewno sie przyda. dzieki temu mozesz do kazdego itema przypisac dowolny obiekt. a obiekt moze zawierac czego tylko dusza zapragnie.

mozesz tez inaczej to rozwiazac. byc moze malo eleganckie i wolne ale do pewnych zastosowan wystarcza: trzymaj w listboxie sciezke+nawze pliku, a wyswietlaj w nim jedynie nazwe - ownerDraw.

0

Może przy użyciu tablicy?

0

No dobra użyłem obiektów a teraz powiedzcie mi jak dodać numerowanie do listboxa, znaczy podczas wczytywania każdego elementu, by wyświetlał się przy każdym itemie numerek. Muszę napisać funkcję która będzie mi wypisywała liczbę a potem podczas dodawania do listboxa będzie tą liczbę dodawać przed każdym itemem. Pomysł jakiś jest ale może wy macie jakieś lepsze?

Edit. Kolejny problem. Podczas dodawania plików do listy wszystkie pięknie działa, jednak gdy dodam do listy kolejne pliki, nie mogę odtworzyć poprzednich. Co teraz z tym zrobić?

0

ownerDraw. przy rysowaniu itema rysuj tez numerek.

0
rydy102 napisał(a)

No dobra użyłem obiektów a teraz powiedzcie mi jak dodać numerowanie do listboxa, znaczy podczas wczytywania każdego elementu, by wyświetlał się przy każdym itemie numerek.

Musisz w zdarzeniu OnDrawItem użyć metody Canvas.TextOut(), w której odpowiednio zamienisz argument Index na łańcuch; Później malujesz tekst, który przechowywany jest dla danego itemu względem indeksu (ListBox.Items.Strings[Index]); Dzięki temu nawet jeśli zmienisz kolejność itemów, zawsze ich numer będzie właściwy;

rydy102 napisał(a)

gdy dodaję do tegoż listboxa pliki to wrzucam tam jedynie same nazwy a ścieżki zapisywane są stringliscie

A na cholere robisz to w ten sposób? Niepotrzebnie korzystasz z dwóch list, jeśli możesz to wykonać używając jednej; Do komponentu wrzucaj pełne nazwy plików (ścieżka + nazwa pliku z rozszerzeniem), a w zdarzeniu OnDrawItem maluj tylko ich samą nazwę - aby wyciągnąć ją musisz skorzystać z funkcji ExtractFileName; Dzięki temu będziesz mógł pokazywać na liście same nazwy plików, a jeśli będziesz chciał pobrać pełną ścieżkę, będziesz normalnie odczytywał cały łańcuch z ListBox.Items.Strings[indeks_itemu];

Jeśli chodzi o sam mechanizm Drag & Drop w ListBox - jest pełno tutków na sieci;

W załączniku masz przykładowe kolorowanie itemów wraz z numerowaniem; Myślę, że się przyda i że zrozumiesz poszczególne instrukcje;

No okej, tylko jeżeli tak zrobię to po załadowaniu kolejnych plików, trzyma tylko ścieżki od tych nowo wrzuconych i wtedy poprzednich które są na liście nie mogę odczytać.

0
rydy102 napisał(a)

No okej, tylko jeżeli tak zrobię to po załadowaniu kolejnych plików, trzyma tylko ścieżki od tych nowo wrzuconych i wtedy poprzednich które są na liście nie mogę odczytać.

chyba nie zrozumiales. Furious Programming napisal o tym o czym ja wczesniej.
dodajesz itemy do listboxa, i zawartosc (zawartosc, a nie to co sie w nim wyswietla) jest taka:

C:\windows\system\plik1.dll
C:\windows\system32\plik2.dll
C:\program files\firma\program\aplikacja.exe
C:\ntldr

a uzywajac ownerDraw rysujesz na kazdym z itemow co tylko chcesz. zawrtosc itema wciaz pozostaje ta sama.
wiec w listboxie wyswietla sie np:

1 plik1.dll
2 plik2.dll
3 aplikacja.exe
4 ntldr
a odczytujac np ListBox1.items[2] otrzymasz to co w rzeczywistosci siedzi w itemie, czyli: "C:\program files\firma\program\aplikacja.exe"

0

Masz w załączniku upgrade programu; Zapoznaj się dokładnie z poszczególnymi instrukcjami bo naprawdę nic w tym trudnego i dziwnego nie ma;

1 użytkowników online, w tym zalogowanych: 0, gości: 1