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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListView. показать редактор item'a 
V
    Опции темы
_hunter
  Дата 13.3.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Добрый день.

Пытаюсь сделать custom-редактор для item'ов/subItem'ов. Для этого в обработчике MouseDown пытаюсь показать TextBox:
Код

        private void ListView_MouseDown (object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ListViewHitTestInfo hti = HitTest(e.X, e.Y);

            ListViewItem listViewItem = hti.Item;
            if (listViewItem == null)
                listViewItem = GetItemAt(e.X, e.Y);
            ListViewItem.ListViewSubItem listViewSubItem = hti.SubItem;

            if (listViewSubItem != null)
            {
                _fieldsEditor.Bounds = listViewSubItem.Bounds;//так же пробовал RectangleToScreen(listViewSubItem.Bounds)
                _fieldsEditor.BringToFront();
                _fieldsEditor.Show();
            }

        }

_fieldsEditor.Show() вызывется, но TextBox не появляется :(

Что я делаю не так/как это исправить?

С уважением...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vponomarov
Дата 14.3.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



попробуй писать что-то вроде такого:
Код

 if (listViewSubItem != null)
            {
                TextBox fieldsEditor=new TextBox();
                _fieldsEditor.Bounds = listViewSubItem.Bounds;//так же пробовал RectangleToScreen(listViewSubItem.Bounds)
                ListView1.Controls.Add(fieldsEditor);
                //_fieldsEditor.BringToFront();
                //_fieldsEditor.Show();
            }


если не хочешь, чтобы каждый раз создавался TextBox, то после окончания редактирования нужно его убирать из контролов листБокса


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 14.3.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



начал появляться, но есть одна проблема: этот TextBox почему-то выше (его height больше) чем высота строки ListView'a.
причем это происходит уже в момент _fieldsEditor.Bounds = listViewSubItem.Bounds: после присваивания
listViewSubItem.Bounds.Height == 14, а _fieldsEditor.Bounds.Height == 20...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vponomarov
Дата 14.3.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



_hunter, высота текстБоха зависит от размера шрифта и в зависимости от него(размера) не может быть меньше определенной величины.
попробуй поиграться с этим параметром


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 14.3.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



и еще вопрос: я хочу чтобы сразу после показа этого TextBox'а в него можно было вводить текст. для этого пишу:
bool focused = _fieldsEditor.Focus();
focused == true, но курсор для ввода текста не появляется...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
_hunter
Дата 14.3.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



и насчет шрифта: я есть какой-то другой способ уменьшить высоту (или это одтельной темой лучше спросить) -- приемлемая высота получается только при 5-м размере шрифта, что очень мало...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vponomarov
Дата 14.3.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



странно. я попробовал такой код:
Код

TextBox __txt = new TextBox();
            __txt.Name = "aaa" + DateTime.Now.Ticks.ToString();
            __txt.Top = userList.Controls.Count > 0 ? userList.Controls[userList.Controls.Count - 1].Top + 25 : 0;
            userList.Controls.Add(__txt);
            //this.ActiveControl = __txt;
            __txt.Focus();
            return;

работают оба варианта: и Focus() и ActiveControl.

Добавлено через 4 минуты и 44 секунды
а на счет высоты: сделай свойство Multiline=true и сможешь выставлять любую высоту smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 14.3.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ничего не понимаю... делаю так:
Код

        private void ListView_MouseDown (object sender, System.Windows.Forms.MouseEventArgs e)
        {
            ListViewHitTestInfo hti = HitTest(e.X, e.Y);

            ListViewItem listViewItem = hti.Item;
            if (listViewItem == null)
                listViewItem = GetItemAt(e.X, e.Y);
            ListViewItem.ListViewSubItem listViewSubItem = hti.SubItem;

            if (listViewSubItem != null)
            {
                if (_fieldsEditor == null)
                {
                    _fieldsEditor = new TextBox();
                    Controls.Add(_fieldsEditor);

                    //Font currentFont = _fieldsEditor.Font;
                    //_fieldsEditor.Font = new Font(currentFont.FontFamily, 5, currentFont.Style);
                }

                _fieldsEditor.Bounds = listViewSubItem.Bounds;
                bool focus = _fieldsEditor.Focus();
            }
        }

и нет фокуса...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
CYBERDREAM
Дата 14.3.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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



напиши просто:
Код

_fieldsEditor.Focus();


Добавлено через 3 минуты и 20 секунд
прошу прощения, не верно smile

Добавлено через 6 минут и 29 секунд
кажется знаю в чем проблема. Повесь обработчки не на MouseDown, а на MouseUp. В похожем случае это решило проблему с фокусом  smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
vponomarov
Дата 14.3.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Повесь обработчки не на MouseDown, а на MouseUp

да, может быть и в этом проблема. я бы вообще повесил на MouseClick или даже MouseDoubleClick smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 14.3.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



попробовал и MouseUp и MouseClick -- курсор появляться не хочет и клавиши нажимаются в ListView'е :(


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vponomarov
Дата 14.3.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот этот код точно работает, только что не поленился проверил!
Код

private void userList_MouseClick(object sender, MouseEventArgs e)
        {
            ListViewHitTestInfo hti = userList.HitTest(e.X, e.Y);

            ListViewItem listViewItem = hti.Item;
            if (listViewItem != null)
            {
                TextBox _fieldsEditor = new TextBox();
                _fieldsEditor = new TextBox();
                userList.Controls.Add(_fieldsEditor);

                _fieldsEditor.Bounds = listViewItem.Bounds;
                bool focus = _fieldsEditor.Focus();
            }
        }


если нужно чтобы редактировались только субИтемы - замени hti.Item на hti.SubItem


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
CYBERDREAM
Дата 14.3.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

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



2 vponomarov рыли мы в верном направлении. Просто обработчик был подписан на MouseDown ))


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
vponomarov
Дата 14.3.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 CYBERDREAM возможно и в этом была проблема
но там изначально в коде много чего неправильного на мой взгляд было...
ну да главное, что проблема решена smile 


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

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


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

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


 




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


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

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