checked list1

10 отговора 0 прегледа
#1

checked list1

Здравейте!
Как да изтрия запис, ако той не е чекнат( не е поставена отметка в чекбокса или след като е поставена е махната). С добавянето на запис нямам проблем

Private Sub List1_Click()
If List1.Selected(List1.ListIndex) = True Then
Form1.List1.AddItem Form2.List1.List(List1.ListIndex)
End If

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

Приложението е на Visual Basic 6.0

If List1.Selected(List1.ListIndex) = False Then
form1.List1.RemoveItem (List1.ListIndex)
End If
End Sub

Редактирано от metamorphosis на

Отговор
в отговор на metamorphosis #2

Re: checked list1

нещо не мога да разбера:
Ползваш CheckedListBox с VB 6.0?
Или имаш някакъв Listbox и отделно нейде из формата Checkbox?

Отговор
в отговор на BatiGogo #3

Re: checked list1

Във форм2 съм поставил лист1, като за лист1 използвам свойството в properies style - 1 checkbox. Когато кликна в лист1 , върху определен запис, той се отпечатва в лист1, който съм поставил във форм1. С това нямам проблем. Опитвам се чекнат запис в форм2 лист1, когато го отчекна (махна тикчето или отмеката) от него той да се изтрие от форм1 лист1.

Отговор
в отговор на metamorphosis #4

Re: checked list1

нещо от сорта на:

Private Sub List1_ItemCheck(Item As Integer)
If Not List1.Selected(Item) Then
List1.RemoveItem (Item)
End If
End Sub

върши ли ти работа?

Отговор
в отговор на BatiGogo #5

Re: checked list1

Не, не се получава! Само ги добавя, без да изтрива тези, които не са отметнати.

Отговор
в отговор на metamorphosis #6

Re: checked list1

Дамн...Като се замисля...
Я пак кажи какво трябва да стане:
Имаш 2 листа в 2 различни форми.
Първия лист и втория лист имат различни елементи. Предмониторното кликва на втория лист и кликнатия елемент се прехвърля в първия? Ако кликне 10 пъти - 10 пъти ли ще се прехвърля в първия (ще се добавя)?
Възможно ли е в даден момент в двата листа да има различен БРОЙ елементи? Т.е. елемента ИВАН в лист1 де е на първо място, а в лист2 да е на седмо?
После и на двете форми имаш лист1..За кой от двата лист1 говориш? Дай им различни имена (напр. ListForm1 и ListForm2) и инфото наново.
После ще се мисли за вариантите.

Редактирано от BatiGogo на

Отговор
в отговор на BatiGogo #7

Re: checked list1

Така, всичките ти предположения са абсолютно верни! Сега за инфото: Имам две форми: form1.list1 и form2.list1. Листа във форма 2 е настроен в style 1- checkbox. Във form2.list1 се съдържат следните записи примерно: user1, user2, user3, user4 и user5. Чрез бутон извиквам form2.list1 и съответно при кликане на избран от мен запис, същия се прехвърля в form1.list1. Примерно: Извикал съм form2.list1 избирам си два записа съответно user3 и user5. Тези записи се прехвърлят по реда на тяхното избиране, тоест в form1.list1 се съдържат записите по реда на техния избор а именно user3 и user5. След като избраните записи съм ги прехвърлил разбирам, че по невнимание грешно съм прехвърлил във form1.list1 записа user3, тогава намирам въпросния във form2.list1 запис а именно user3, заставам на него и кликам в checkboxa и записът вече не е маркиран и същия се изтрива от form1.list1 тоест във form1.list1 е останал само запис user5.

Редактирано от metamorphosis на

Отговор
в отговор на metamorphosis #8

Re: checked list1

Светна ми идеята. Значи трябва да проверяваш елемента от втората форма , дали форма, дали го има на листа в първата.
Аз бих направил следното:
1. на FORM2 да сложа още един List2 (ще потрябва по-нататък)
2.Задавам му свойството Visable=false (няма да бъде необходимо да се вижда, но за теста може да го включиш)
3. Отварям форм2 и цъквам на List1 и copy кода:


Private Sub List1_Click() 'когато се кликва
Dim EL0 As String, I As Integer, EL1 As String 'дефиниции
If List1.Selected(List1.ListIndex) Then 'ако е чекнат
Form1.List1.AddItem Form2.List1.List(List1.ListIndex) 'ако е чекнат -да се прехвърли
Else 'в противен случай
EL0 = Form2.List1.List(List1.ListIndex) 'запомням текущия елемент
Form2.List2.Clear 'изтривам ако има нещо във временния лист
For I = 0 To Form1.List1.ListCount - 1 'цикъл по елементите на листа във Form1
EL1 = Form1.List1.List(I)
If EL1 <> EL0 Then
Form2.List2.AddItem EL1 'прехвърлят се във временния лист само тези елементи , които са различни от този дето не го щем
End If
Next
Form1.List1.Clear 'изтрива се лист1
For I = 0 To Form2.List2.ListCount - 1 'прехвърлят се всички елементи от временния лист обратно
Form1.List1.AddItem Form2.List2.List(I)
Next
End If
End Sub


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

Редактирано от BatiGogo на

Отговор
в отговор на BatiGogo #9

Re: checked list1

Супер много ти благодаря! Стана мноо яко! Да си жив и здрав!

Отговор
в отговор на metamorphosis #10

Re: checked list1

Пак заповядай.
Ако тоя чекбокс ти требе само за тва - да няма дублиране, по-добре да правиш проверка за дублиране още при прехвърлянето...Пестиш няколко неща:
1.лист2
2.възможност предмониторното да не види,че има дублаж и по този начин да реве,че програмчето е бъгаво и не ще да прави това дето го иска, а понякога......

Аз бих направил нещо такова:


Private Sub List1_Click()
Dim OK As Boolean, EL As String, I As Integer
If List1.Selected(List1.ListIndex) Then
EL = List1.List(List1.ListIndex)
'ako vsi4ko e prehvurleno, nema smisul ot vrutkata
OK = Form1.List1.ListCount < List1.ListCount
I = 0
'cikul - ili vsi4ki sa razli4ni ili ima pone edno ravenstvo
While (I < Form1.List1.ListCount) And OK
'OK=false-ako sa ravni i izhod&#206;
OK = Form1.List1.List(I) <> EL
I = I + 1
Wend
If OK Then 'ako nema ravenstvo
Form1.List1.AddItem EL
End If
End If
End Sub




Тогава няма да ми бъде необходимо List2 и style да е с чекване.

Редактирано от BatiGogo на

Отговор
в отговор на BatiGogo #11

Re: checked list1

Благодаря! Отдавна не е имало толкоз отзивчив съфорумник!

А иначе, за предложените промени ще ги използвам.

Възникна проблемче при записването и четенето в и от ACCESS 2003, когато са повече от един запис в form1.list1. Но засега ще опитам сам да се справя.

Отговор