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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подстановка в OnPaint прорисовки другого контрола 
:(
    Опции темы
StepS
Дата 27.11.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем.
Надо в своем контроле, унаследованном от Panel, сделать прорисовку как у кнопки (Button) т.е. что-то типа:
Код

public class MySuperPanel : Panel{
  private Button button;

  public MySuperPanel(){
    button = new Button();
  }

  protected override OnPaint(sender object, EventArgs e){
     button.OnPaint(button, e); // без руля как тут нужно сделать.
     button.Invalidate(); // так пробовал, но ниче не происходит.
  }
}


т.е. чтобы панелька отображалась в виде кнопки. Как такое сделать ? или если можно ссылочку где про такое написано ? 
PM MAIL ICQ   Вверх
ivashkanet
Дата 27.11.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



StepS, button.OnPaint(button, e); и button.Invalidate(); просто заставляют перерисоваться кнопку, но никак не панель.


StepS, что ты имеешь ввиду под "сделать прорисовку как у кнопки"?
Полукруглая панель с небольшим цветным бордюром? Тогда ее лучше нарисовать самому.
PM MAIL WWW ICQ   Вверх
StepS
Дата 27.11.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ок. Теперь хочу развить дальше...
мне в эту панельку передается контрол: Button, TextBox, ComboBox и т.д.
а эта панелька должна отобразить этот контрол, но без каких-либо событий, поведений и т.д. просто отобразить.
Вот для таких целей нужно сделать такую мегапанельку.
Просто я пробовал убрать все собития из контролов и просто выводить контролы - ничего не вышло. Вот пришел в голову такой вариант с панелькой. Это по типу дизайнера форм.
PM MAIL ICQ   Вверх
ivashkanet
Дата 27.11.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



StepS, интересная идея. Но вот только как ее реализовать smile 
1) Лучший вариант выдрать код прорисовки из контрола, который лежит на форме, но его никто не даст smile Потому, что он приватный.
2) Есть еще идея, правда страшно топорная. Положить на панель контрол, а сверху прозрачную панель  smile 
PM MAIL WWW ICQ   Вверх
StepS
Дата 27.11.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вот-вот... у меня вторая идея тоже возникала, но я думал можно как-то подставить прорисовку.
Если такое сделать нельзя, тогда ща задам другой вопрос на форуме. Касательно FormDesigner-а в VS
PM MAIL ICQ   Вверх
DarkDragon
Дата 28.11.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Здарово.
Ну ща я тебе че нить стряпаю:

Код

        private void AddControl (Panel pn, Control ctrl)
        {
            ctrl.Dock = DockStyle.Left;
            pn.Controls.Add (ctrl);
            ctrl.BringToFront(); 
        }
//Теперь значить делаешь так:
  AddControl (panel1, new Button()); // или еще че нить


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

Если правда ты имеешь ввиду Panel, а ToolBar!
PM MAIL   Вверх
StepS
Дата 28.11.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



DarkDragon, написал как ты показал, но что-то кнопка все равно реагирует на нажатие smile
вот код который я написал:

Контрол:
Код

    class SuperPanel : Panel {
        
        public SuperPanel(Control oControl) {
            oControl.Dock = DockStyle.Left;
            Controls.Add(oControl);
            oControl.BringToFront();
        }
    }


Клиент:
Код

        private void TestWinForm_Load(object sender, System.EventArgs e) {
            Button oButton = new Button();
            oButton.Text = "TestButton";
            oButton.Location = new Point(0,0);
            oButton.Size = new Size(100, 20);
            SuperPanel oSuperPanel = new SuperPanel(oButton);
            oSuperPanel.Size = new Size(120, 25);
            oSuperPanel.Location = new Point(5, 5);
            oSuperPanel.BorderStyle = BorderStyle.FixedSingle;
            Controls.Add(oSuperPanel);
        }


а мне нужно просто, чтоб кнопка отрисовалась, а реакция на пользователя была как у панельки (грубо говоря), т.е. кнопка вообще никак не реагировала.

PM MAIL ICQ   Вверх
ivashkanet
Дата 28.11.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Вот что у меня получилось не получилось  smile 
Код

    class SuperPanel : Panel
    {
        // Панелька которая будет закрывать контрол,
        // который будет придавать определенный вид панели
        private Panel _coveringPanel;
        public SuperPanel(Control control)
            : base()
        {
            _coveringPanel = new Panel();
            _coveringPanel.BackColor = Color.Transparent;
            _coveringPanel.Dock = DockStyle.Fill;
            base.Controls.Add(_coveringPanel);

            control.Dock = DockStyle.Fill;
            base.Controls.Add(control);
        }

        // Переопределяем свойство Control,
        // чтобы на нашу панельку можно было добавлять другие контролы
        // Они будут ложиться на _coveringPanel
        public new ControlCollection Controls
        {
            get { return _coveringPanel.Controls; }
        }


Не могу сделать покрывающую панель прозрачной  smile 
и что-то у мя с докингом, не растягивается на весь экран smile

Добавлено @ 13:29 
Цитата(ivashkanet @  28.11.2006,  12:29 Найти цитируемый пост)
Не могу сделать покрывающую панель прозрачной 

Вернее могу, форма из под нее отлично просматривается, а вот кнопка --- нет smile
PM MAIL WWW ICQ   Вверх
-Mikle-
Дата 28.2.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



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

В VS 2005 (а может и в 2003) это делается одной строчкой:

Код

    System.Windows.Forms.ButtonRenderer.DrawButton(......);


И там есть не только ButtonRenderer'ы...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Gelis
Дата 28.2.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Еще одно решение
Код

class MyPanel:Panel
    {
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            ControlPaint.DrawBorder(e.Graphics, this.Bounds,
                SystemColors.ActiveBorder,ButtonBorderStyle.Outset);

        }
    }

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

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


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

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


 




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


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

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