Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические кнопки, из БД 
V
    Опции темы
Kefir
Дата 6.3.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



Задача такова - из БД (мускул) выбираются категории (например: Рестораны, Бары, Клубы, ...). Далее программа должна вывести эти категории в виде кнопок (можно и не кнопок - главное чтобы выглядело как кнопки smile ). Кол-во кнопок (=категорий) я могу получить из БД с помощью COUNT. И вот у меня появилась проблема:
1. Как сделать генерацию кнопок?
2. Как сделать так, чтобы нажатия на кнопки имели свой собственный эвент?
PM MAIL WWW Skype   Вверх
Exception
Дата 6.3.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Теоретически должно работать.
Код
foreach(string s in categories)
{
    Button b = new Button();
    b.Text = s;
    b.Click += new EventHandler(OnButtonClick);
    t.Controls.Add(b);
}
Ну и, соответственно, пишешь метод OnButtonClick.
PM   Вверх
Kefir
Дата 6.3.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



Гм... я сейчас не могу проверить, но ведь с таким кодом у меня будет куча кнопок b с обработчиком клика? как их различать-то?..
PM MAIL WWW Skype   Вверх
chwind
Дата 6.3.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



System::Object * sender
в Обработчике преобразовывай sender обратно к бутону и анализируй его свойство Текст или лучше записывай в момент создания кнопок что нибудь осмысленое в Tag и потом амнализируй это свойство


Код

System::Void ButtonClick(System::Object *  sender, System::EventArgs *  e)
{
  System::Windows::Forms::Button *  Button = dynamic_cast<System::Windows::Forms::Button *>(sender);
  if (Button->Text...)
  {
    ...
  }
}


Код писал для с++, думаю для шарпа приведение типов будет выглядеь попроще smile

PM MAIL   Вверх
Exception
Дата 6.3.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
void ButtonOnClick(object sender, EventArgs e)
{
    switch(((Button)sender).Text)
    {...}
}
Должно быть так.
PM   Вверх
Kefir
Дата 6.3.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



Exception, спасибо... идкю я понял... но теперь другой вопрос - а если у меня две такие кнопки с одинаковым текстом - то есть ли куда записать, например, id записи в БД (в классе кнопки) или мне надо будет расширять этот класс чтобы добавить такую фичу? Я просто назначение многих параметров в кнопке не знаю - запишу ещё чего-нибудь не так/не туда... smile
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 6.3.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Kefir @ 6.3.2006, 11:36 Найти цитируемый пост)
Exception, спасибо... идкю я понял... но теперь другой вопрос - а если у меня две такие кнопки с одинаковым текстом - то есть ли куда записать, например, id записи в БД (в классе кнопки) или мне надо будет расширять этот класс чтобы добавить такую фичу? Я просто назначение многих параметров в кнопке не знаю - запишу ещё чего-нибудь не так/не туда.


chwind же написал:

Цитата(chwind @ 6.3.2006, 11:05 Найти цитируемый пост)
лучше записывай в момент создания кнопок что нибудь осмысленое в Tag и потом амнализируй это свойство


Можно хоть ID хоть сам DataRow в Tag запихнуть...


--------------------
user posted image
PM MAIL WWW   Вверх
4YBAK
Дата 8.3.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня чет никак не хочет работать:

Код

for(int k=1;k<=4;k++)
            {
                Button knopka=new Button();
                knopka.Text="Кнопка";
                knopka.Location=new Point(100,50*k);
                knopka.Click+=new EventHandler(knopkaClick);
                knopka.Tag=k;
                this.Controls.Add(knopka);

            }

void knopkaClick(object sender, System.EventArgs e)
{        
      switch(((Button)sender).Tag)  //В этой строчке выдает ошибку: A value of an integral type expected

       {
            case 1:
                     {...} 
                 break;

       }
}

Мне надо в зависимости от того, какое число в Tag у кнопки, выполнять то или иной код...


Это сообщение отредактировал(а) 4YBAK - 8.3.2006, 18:43
PM MAIL   Вверх
Kefir
Дата 8.3.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



4YBAK, попробуй к int привести.
PM MAIL WWW Skype   Вверх
4YBAK
Дата 8.3.2006, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Kefir @ 8.3.2006, 19:25 Найти цитируемый пост)
попробуй к int привести.

Стопудова! Работает!

Сорри за небольшой офтоп: чем отличается приведение типа c помощью (int) от Convert.ToInt32()
Пока не ответите, заснуть не смогу ))


PM MAIL   Вверх
4YBAK
Дата 8.3.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



smile

Тогда для чего это вообще было сделано? 2 записи одного и того же действия?

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


Java-ненавистник :)
****


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

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



Цитата(4YBAK @ 8.3.2006, 22:11 Найти цитируемый пост)
2 записи одного и того же действия?

Нет!!!
Это принципиально разные действия.
Тов. Exception, зачем вы человека с толку сбиваете? Это ж не VB, а C#.

(int) это приведение типа. Т.е. если у тебя есть переменная в которой хранится число, но её тип не int, а, например, object, то можно сделать так:
Код

object obj = 5;
int n = (int)obj;


Convert.ToInt32 используется, когда ты не уверен, что там хранится число. Например если там строка, то ты просто так привести её к int не можешь.
Код

string str = "5";
int n = (int)str; // будет ошибка

А вот если написать:
Код

int n = Convert.ToInt32(str);

То всё будет хорошо. Будет вызван метод Int32.Parse(str); и сделан разбор строки.

Короче, (int) это уточнение, что у тебя там не просто так, а именно int.
А Convert.ToInt32 -- это преобразование данных любого типа в int.

Это сообщение отредактировал(а) Дрон - 8.3.2006, 22:45


--------------------
Да. Именно так.
PM   Вверх
Exception
Дата 9.3.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Спасибо, что указал на ошибку. Исправлюсь smile
PM   Вверх
4YBAK
Дата 9.3.2006, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Дрон, Понял! Пасиба!
Т.е. в принципе надежнее юзать Convert.ToInt32() нежели (int). Т.к. в первом случае уж точно никаких ошибок не будет?
И вопрос номер последний: Разница между Int32.Parse(str) и Convert.ToInt32()

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


Java-ненавистник :)
****


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

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



Цитата(4YBAK @ 9.3.2006, 02:43 Найти цитируемый пост)
Разница между Int32.Parse(str) и Convert.ToInt32()

Вот тут разницы уже практически нет smile
Convert.ToInt32 вызывает для строк метод Int32.Parse
Но лучше пользоваться Convert smile



--------------------
Да. Именно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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