Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очищение ListBox'ов по паролю, Несколько listbox'в очищать по паролю 
:(
    Опции темы
Evgen7
Дата 2.5.2011, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2011

Репутация: нет
Всего: нет



Доброго времени суток!
Задача:имеется несколько ListBox в одной форме (ResultTestAll.h). Под каждым по кнопке "Очистить". 
Нужно: для каждого очищения ListBox сделать свой пароль, т.е жму очистить, мне предлагают ввести пароль в новйо форме (PassWord.h).


Если ListBox один, я делал вот так:

ResultTestAll.h
Код

void __fastcall TResult::Button1Click(TObject *Sender)
{  PasswordDlg->ShowModal();}



PassWord.h
Код

void __fastcall TPasswordDlg::OKBtnClick(TObject *Sender)
{
   // проверка на правильность пароля
  if (PasswordDlg->Password->Text == 1)
   { Result->ListBox1->Clear();}

  else
       MessageBox(0,"Неверный пароль!",0,MB_OK);
       Password->Text="";

}

PM MAIL   Вверх
_Dimon_
Дата 2.5.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Код

void __fastcall TPasswordDlg::ClearListBox(TListBox *List)
{
  Password->Text = "";
  if (PasswordDlg->ModalResult()==mrOk)
   if (Password->Text == "нужный пароль")  List->Clear();
   else
     {  
       MessageBox(0,"Неверный пароль!",0,MB_OK);
       // если надо еще раз вызвать диалог, можно использовать рекурсию
       ClearListBox(List);
     }
}


Кнопке поставь ModalResult = mrOk;

Это сообщение отредактировал(а) _Dimon_ - 2.5.2011, 14:19
PM MAIL   Вверх
borisbn
Дата 2.5.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Evgen7, тебе не кажется, что очистка чужого ListBox'а не совсем должно входить в задачи TPasswordDlg ?
IMHO лучше сделать так
Код

void __fastcall TResult::Button1Click(TObject *Sender)
{
    PasswordDlg->ShowModal();
    if ( PasswordDlg->isPasswordCorrect( 1 ) ) {
        ListBox1->Clear();
    }
    else {
       MessageBox(0,"Неверный пароль!",0,MB_OK);
    }
}

void __fastcall TResult::Button2Click(TObject *Sender)
{
    PasswordDlg->ShowModal();
    if ( PasswordDlg->isPasswordCorrect( 2 ) ) {
        ListBox2->Clear();
    }
    else {
       MessageBox(0,"Неверный пароль!",0,MB_OK);
    }
}

// PassWord.h
class TPasswordDlg : ...
{
private:
    AnsiString m_enteredPassword;
public:
    bool __fastcall isPasswordCorrect( int listIdx );
...
};

// PassWord.cpp
void __fastcall TPasswordDlg::OKBtnClick(TObject *Sender)
{
   // сохранение пароля
   m_enteredPassword = Password->Text;
   Password->Text = "";
}

bool __fastcall TPasswordDlg::isPasswordCorrect( int listIdx )
{
    switch ( listIdx ) {
        case 1:
            return m_enteredPassword == "qwe";
        break;
        case 2:
            return m_enteredPassword == "asd";
        break;
    }
    return false;
}


Это сообщение отредактировал(а) borisbn - 2.5.2011, 14:21


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
_Dimon_
Дата 2.5.2011, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата(borisbn @  2.5.2011,  14:19 Найти цитируемый пост)
тебе не кажется, что очистка чужого ListBox'а не совсем должно входить в задачи TPasswordDlg ?

Если она только для этого предназначена, то почему бы и нет.

В твоем варианте всеравно switch присутствует, который тоже как-бы не нужен этой форме

Добавлено @ 14:36
Хотя свич тоже нужен, я пропустил то, что для каждого листбокса свой пароль нужен

Код

void __fastcall TPasswordDlg::ClearListBox(TListBox *List, UnicodeString /* или AnsiString*/ pass)
{
  Password->Text = "";
  if (PasswordDlg->ModalResult()==mrOk)
   if (Password->Text == pass)  List->Clear();
   else
     {  
       MessageBox(0,"Неверный пароль!",0,MB_OK);
       // если надо еще раз вызвать диалог, можно использовать рекурсию
       ClearListBox(List,pass);
     }
}


Код

void __fastcall TResult::Button1Click(TObject *Sender)
{ 
  PasswordDlg->ClearListBox(ListBox1,"fdsjklds");
}

void __fastcall TResult::Button2Click(TObject *Sender)
{ 
  PasswordDlg->ClearListBox(ListBox2,"qwyeuwq");
}


ИМХО, так лучше будет ....

Это сообщение отредактировал(а) _Dimon_ - 2.5.2011, 14:46
PM MAIL   Вверх
Evgen7
Дата 2.5.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2011

Репутация: нет
Всего: нет



Сделал как borisbn написал - всё получилось. Спасибо.
_Dimon_ тоже спасибо!!!
PM MAIL   Вверх
borisbn
Дата 2.5.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Evgen7 @  2.5.2011,  15:27 Найти цитируемый пост)
Сделал как borisbn написал - всё получилось. Спасибо.

не спеши, IMHO у _Dimon_ попроще, да и пологичнее выглядит. Единственное, я бы не советовал рекурсивно вызывать ClearListBox, т.к. при n-ном неправильном вводе пароля стек вызова может переполниться.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Evgen7
Дата 2.5.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.5.2011

Репутация: нет
Всего: нет



borisbn, как ты написал мне понятнее просто. А способ Dimon'a у меня не получился что-то (ну я ещё поразбираюсь). спс за советы.
PM MAIL   Вверх
_Dimon_
Дата 20.6.2011, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата(borisbn @  2.5.2011,  16:07 Найти цитируемый пост)
Единственное, я бы не советовал рекурсивно вызывать ClearListBox, т.к. при n-ном неправильном вводе пароля стек вызова может переполниться.


А сколько надо таких вызовов, чтоб стек переполнился, и если не сложно, обьясните в двух словах почему?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1255 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.