gorod |
Отправлено: 19.12.2006, 11:05 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
такая проблемма
надо из одного лист бокса переместить выделенные сторки в другой
и ,потом,удалить эти строки из 1-го
переместиь получается а вот удалить нет
на deletе билдер говорит что я пытаюсь удалить указатель а не элемент
вопрос: как удальть и то,и другое??
|
|
Romikgy |
Отправлено: 19.12.2006, 11:25 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
CODE |
ListBox-> Items->Delete( номер удаляемой строки);
|
только удаляй с конца списка! |
|
gorod |
Отправлено: 19.12.2006, 11:59 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
я про конец строки не понял
на сколько я помню строки считаются с 0-й,и конец или начало не важно
и если писать CODE | delete(ListBox1->ItemIndex) |
что и должно означать номер выбранной строки, меня билдер шлет на...
Отредактировано gorod — 19.12.2006, 12:02
|
|
Romikgy |
Отправлено: 19.12.2006, 12:16 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
в дебагере посмотри что в ListBox1->ItemIndex
и лучше писать полностью
ListBox1-> Items->Delete(ListBox1->ItemIndex)
только удостоверятся что ListBox1->ItemIndex в пределах кол-ва строк |
|
Doga |
Отправлено: 19.12.2006, 14:01 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Как только Вы удалите элемент списка с индексом ListBox1->ItemIndex (если конечно он до этого ещё не был равен -1),
ListBox1->ItemIndex автоматически примет значение -1. При с ледующем вызове Delete возникнет ошибка — что естественно. Вообще, лучше не пользоваться свойством ItemIndex в качестве индекса элемента при удалении, или по крайней мере, после каждого вызова Delete, принудительно изменять его значение в пределах 0...Count-1.
Удалять с конца не обязательно, можно и сначала. Только надо после удаления декрементировать значение итератора.
CODE |
for (int k = 0; k < ListBox->Items->Count; k++)
{
if ((ListBox->Items->Strings[k] == "AAA") || (ListBox->Items->Strings[k] == "BBB"))
{
ListBox->Items->Delete(k);
k--;
}
}
|
|
|
Romikgy |
Отправлено: 19.12.2006, 14:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
А не проще ли так?
CODE |
for (int k = ListBox->Items->Count-1; k >=0; k--)
{
if ((ListBox->Items->Strings[k] == "AAA") || (ListBox->Items->Strings[k] == "BBB"))
{
ListBox->Items->Delete(k);
}
}
| |
|
gorod |
Отправлено: 19.12.2006, 17:52 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
господа вы недопоняли
у меня в лист бокс может
быть введена любая строка,
перемещатся и удалятся ,соответственно,тоже.
и ваши советы немного не в тему
вот так я копируюCODE | int i,j= ListBox1->ItemIndex — ListBox1->SelCount +1;
for (int k=0,i=j;k < ListBox1->SelCount; k++,i++)
ListBox2->Items->Insert(k,ListBox1->Items->Strings[i]);
delete(ListBox1->Items->Strings[i]);// |
нужно удалить скопированные строки
|
|
AVC |
Отправлено: 19.12.2006, 17:59 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (gorod @ 19.12.2006, 16:52) | господа вы недопоняли
нужно удалить скопированные строки |
Если внимательно посмотреть на ответы, то можно увидеть что вам советуют элементы листбокса удаляятьне так
delete(ListBox1->Items->Strings[i]);//
а так
ListBox->Items->Delete(i);
|
|
gorod |
Отправлено: 19.12.2006, 19:31 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
неа не получается
"[C++ Error] Unit1.cpp(44): E2280 Member identifier expected"
ожидаемая ошибка идентификатора
|
|
Romikgy |
Отправлено: 19.12.2006, 23:14 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
создаешь новое приложение, кидаешь на форму 2 листбокса, и 2 баттона
CODE |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i=0;i<15;i++)
ListBox1->Items->Add("Privet"+IntToStr(i));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ListBox1->MultiSelect=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (int i=ListBox1->Count-1;i>=0;i--)
if (ListBox1->Selected[i])
{
ListBox2->Items->Insert(0,ListBox1->Items->Strings[i]);
ListBox1->Items->Delete(i);
}
}
//---------------------------------------------------------------------------
|
вставляешь этот код и смотришь, как делатся то что те нужно!
PS кнопка 1 заполняет листбокс 1 ,
потом выделяешь сколько надо и нажимаешь на кнопку 2
Отредактировано Romikgy — 19.12.2006, 22:16 |
|
Make |
Отправлено: 20.12.2006, 09:22 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
Ёу , тока позавчера сделал тоже само, тока коду более получилось |
|
Romikgy |
Отправлено: 20.12.2006, 10:05 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
Экономь на коду |
|
gorod |
Отправлено: 20.12.2006, 10:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
CODE |
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Items->Add(Edit1->Text);//Add strings
Edit1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ListBox2->Items->Add(Edit1->Text);//Add strings
Edit1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Application -> Terminate();//Close form
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i,j= ListBox1->ItemIndex — ListBox1->SelCount +1;
for (int k=0,i=j;k < ListBox1->SelCount; k++,i++)
ListBox2->Items->Insert(k,ListBox1->Items->Strings[i]);
ListBox1->Items->delete(i);//
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int i,j= ListBox2->ItemIndex — ListBox2->SelCount +1;
for (int k=0,i=j;k < ListBox2->SelCount; k++,i++)
ListBox1->Items->Insert(k,ListBox2->Items->Strings[i]);
ListBox2->Items->delete(i);//
}
//---------------------------------------------------------------------------
| а это разве не то?
|
|
Romikgy |
Отправлено: 20.12.2006, 11:58 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
У тя это работает так как ты хошь?
если да , то и сказал бы что уже не надо ! |
|
gorod |
Отправлено: 20.12.2006, 19:54 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
в том-то и дело что не работает((((
|
|
Romikgy |
Отправлено: 21.12.2006, 00:11 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
А мой код? |
|
gorod |
Отправлено: 22.12.2006, 16:19 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
Ваше-работает)))
МОГУЧИЕ ШАЙТАНСТВО!!!)))
|
|