Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подскажите как сделать чтобы при клике по элементу Panel у нее появлялся контур?

47K
03 июля 2012 года
Rayrat7
99 / / 09.06.2012
Подскажите как сделать чтобы при клике по элементу Panel у нее появлялся контур?
еще пытался сделать чтобы при нажатии в текстовом поле отображалась определенная информация. Как понял, это через фокус делается
пробовал вот так, неработает...


Код:
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
        Me.Controls.Add(Panel1)
    End Sub
 
    Private Sub panel1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        TextBox2.Text = "кккккккккккккккккккккккк"
    End Sub

    Private Sub panel1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
        TextBox2.Text = "ыыыыыыыыыыыыыыыыыыыыыыыы"
    End Sub
могу я вобще с элементом Панель использовать Private Sub Panel1_Click??
47K
03 июля 2012 года
Rayrat7
99 / / 09.06.2012
контур - в смысле выделение этой панели как активной
47K
03 июля 2012 года
Rayrat7
99 / / 09.06.2012
вот так уже
Код:
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
        Me.Controls.Add(Panel1)
    End Sub
 
    Private Sub panel1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.LostFocus
        TextBox2.Text = "1234"
    End Sub

    Private Sub panel1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.GotFocus
        TextBox2.Text = "123"
    End Sub
40K
04 июля 2012 года
D129
228 / / 18.04.2012
Вот это:

 
Код:
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
        Me.Controls.Add(Panel1)
    End Sub
Серьезная ошибка.

Вы подписываетесь на эвент каждый раз, когда форма перерисовывается - то есть каждый раз когда ее перекрывает-проходит над ней итп - другая форма.

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

Подписку обработчиков надо делать один раз - в момент создания контрола.
40K
04 июля 2012 года
D129
228 / / 18.04.2012
По сути вопроса - у эвента MouseMove есть параметры, например e - а внем даже есть информация, нажата кнопка мыши или нет и какая.
Вот этот случай и можно обработать, приведя тип обьекта sender к типу panel и изменив у полученного свойство borderstyle (не помню точно).
47K
04 июля 2012 года
Rayrat7
99 / / 09.06.2012
увы в других вариантах перетаскивания пока разобраться не смог
40K
04 июля 2012 года
D129
228 / / 18.04.2012
Цитата: Rayrat7
увы в других вариантах перетаскивания пока разобраться не смог



Это не оправдание чтобы писать багокод.
Опасно продолжать так - в какой-то момент вы вообще перестанете понимать, что у вас происходит.
Я же давал вроде пример с перетаскиванием....

Надо:
- Четко выяснить, где создается панель. (и опять - почему панель? надо делать Юзерконтрол! Примитивным подходом вы уже не обойдетесь. Примитивно - вовсе не значит просто. Обязательно надо использовать организующие конструкции - в тот момент, когда примитивный подход приводит к копированию и писанию повторяющегося кода.

- в момент созадния экземпляра, его надо подготовить к будущей жизни - прицепить все необходимые обработчики, дать ему нужную визуализацию, итп...

- все, дальше он уже должен жить своей жизнью и реагировать на действия пользователя. Реагировать - а не додалбливаться инициализацией на грани интуиции.

40K
04 июля 2012 года
D129
228 / / 18.04.2012
не люблю писать на виби - хотя как раз вот сейчас пишу. На шарпе мог бы вам все поттвердить кодом.
:-)
47K
04 июля 2012 года
Rayrat7
99 / / 09.06.2012
Сделал по другому, теперь на PictureBox на них можно?) они никуда не пропадают при сворачивании и тп
47K
04 июля 2012 года
Rayrat7
99 / / 09.06.2012
Увы у меня уже почти нет времени на обучение и вникание.... попробую сделать все на столько просто на сколько это только возможно чтобы основные функции хотябы выполнялись а там уже походу буду наварачивать
40K
04 июля 2012 года
D129
228 / / 18.04.2012
Можно. Панельки тоже не пропадают при сворачивании - потому, что они дети класса Control
и они все перерисовываются.

Кстати, как у вас с пониманием наследования? почему в эвенте можно через ссылку на обьект (sender) можно узнать и достать того, у кого этот эвент случился - вы это понимаете?
Виби плох тем, что он пытается (и весьма успешно) скрыть обьектную структуру дотнета, сделать все типа интуитивно понятно. Это здорово, когда действительно не нужно выходить за рамки принципа RAD - rapid application development , накидал кнопочек и текстбоксов - и программа готова.
Но у вас уже не тот случай.
40K
04 июля 2012 года
D129
228 / / 18.04.2012
Цитата: Rayrat7
а там уже походу буду наварачивать


Вы ведь не первый, кто оказался в такой же ситуации.

Вот как раз юзерконтрол и позволил бы вам - "по ходу наворачивать" - а так придется тупо все переписывать.

47K
05 июля 2012 года
Rayrat7
99 / / 09.06.2012
Использовал BorderStyle для выделения объекта при нажатии как сделать чтобы он пропадал с предыдущего объекта при нажатии на новый??
47K
05 июля 2012 года
Rayrat7
99 / / 09.06.2012
чтобы выделение всегда было только на одном объекте
277
05 июля 2012 года
arrjj
1.7K / / 26.01.2011
Ну с твоей архитектурой приложения примерно так:
при клике в цикле пробегаем по всем панелям и отключаем у них рамку, у кликнутого включаем.
465
07 июля 2012 года
QWERYTY
595 / / 25.03.2012
Не, лучше так:
Создаём переменную, в которую будем записывать хендл объекта на который устанавливаем рамку.
Потом при клике удаляем рамку с объекта который сейчас в переменной, потом устанавливаем рамку на новый объект и сохраняем новый хендл в переменную.
7
08 июля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: QWERYTY
Создаём переменную, в которую будем записывать хендл объекта на который устанавливаем рамку.
Потом при клике удаляем рамку с объекта который сейчас в переменной, потом устанавливаем рамку на новый объект и сохраняем новый хендл в переменную

Поддерживаю,хороший вариант.Сам так некогда делал
Разумеется,следует проверять переменную на пустоту

47K
09 июля 2012 года
Rayrat7
99 / / 09.06.2012
ОК попробую
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог