none
Два вопроса RRS feed

  • Вопрос

  • 1)Как я понимаю клиенты спец возможностей для объектов- это всякие менеджеры отрисовки, поиска и тп, а не подскажите как называются эти менеджеры, например для listview в представлении detalis(таблица), и как их найти, и как с ними правильно работать

    2)Здравствуйте не подскажите как выяснить какой пункт меню в ToolStripMenuItem пользователь выбрал


    25 декабря 2010 г. 18:09

Ответы

  • Нужно руками писать всю отрисовку данного элемента. Например у вас есть contextMenuStrip1, в нем есть 1 пункт меню (testToolStripMenuItem1). Для этого testToolStripMenuItem1 нужно установить свойство DisplayStyle в None и в обработчике Paint уже писать логику отрисовки элемента. Вот пример обработчика:

        private void testToolStripMenuItem_Paint(object sender, PaintEventArgs e)
        {
          ToolStripMenuItem mi = (ToolStripMenuItem)sender;
          if (mi.Selected)
          {
            e.Graphics.FillRectangle(Brushes.Red, e.ClipRectangle); // заливка фона цветом
            // e.Graphics.DrawImage(Image.FromFile(/* файл для фона */), e.ClipRectangle); // заливка фона файлом
            e.Graphics.DrawString("Test", new Font("Arial", 12), Brushes.White, e.ClipRectangle.Location);
          }
          else
          {
            e.Graphics.DrawString("Test", new Font("Arial", 12), Brushes.Blue, e.ClipRectangle.Location);
          }
        }
    

     

    Также посмотрите статью Owner-Draw Menus

     


    Для связи [mail]
    • Помечено в качестве ответа I.VorontsovModerator 17 января 2011 г. 8:06
    13 января 2011 г. 10:16

Все ответы

  • Помогите пожалуйста((
    25 декабря 2010 г. 19:25
  • 1) Можно более подробно что вы имеете ввиду?

    2) Для каждого пункта меню можете подписаться своё на событие клика. Или можно подписать все пункты меню на одно событие click, а в нем из sender узнавать какой именно пункт выбран из свойства Name или Text. А еще можно для каждого элемента ToolStripMenuItem задавать свой, какой-то уникальный Tag и по ним уже определять.


    Для связи [mail]
    25 декабря 2010 г. 22:03
  • 1)Практически в каждом компоненте, есть раздел "Специальные возможности", в котором написано про клиенты спец возможностей, как я понимаю эти клиенты- надстройки над объектом, например клиент отрисовки, который позволяет настроить дизайн всплывающего меню, например как в этой программе 

    http://rizek.ucoz.ru/load/legkie_programmki/rizek_kalkuljator_2/rizek_kalkuljator_2/14-1-0-14 , при нажатии на дополнительные возможности, всплывает меню, с красивым дизайном

    26 декабря 2010 г. 13:18
  • В самом VS есть такие компоненты, например главное меню при наведении цвет становиться градиентным- желто-белым
    27 декабря 2010 г. 17:49
  • Уважаемый пользователь!


    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    10 января 2011 г. 18:09
  • Не подскажите хотя бы как сделать, так что бы при наводе на элемент, например вплывающего меню, этот элемент отображался, по другому, а не системно
    11 января 2011 г. 11:50
  • Нужно руками писать всю отрисовку данного элемента. Например у вас есть contextMenuStrip1, в нем есть 1 пункт меню (testToolStripMenuItem1). Для этого testToolStripMenuItem1 нужно установить свойство DisplayStyle в None и в обработчике Paint уже писать логику отрисовки элемента. Вот пример обработчика:

        private void testToolStripMenuItem_Paint(object sender, PaintEventArgs e)
        {
          ToolStripMenuItem mi = (ToolStripMenuItem)sender;
          if (mi.Selected)
          {
            e.Graphics.FillRectangle(Brushes.Red, e.ClipRectangle); // заливка фона цветом
            // e.Graphics.DrawImage(Image.FromFile(/* файл для фона */), e.ClipRectangle); // заливка фона файлом
            e.Graphics.DrawString("Test", new Font("Arial", 12), Brushes.White, e.ClipRectangle.Location);
          }
          else
          {
            e.Graphics.DrawString("Test", new Font("Arial", 12), Brushes.Blue, e.ClipRectangle.Location);
          }
        }
    

     

    Также посмотрите статью Owner-Draw Menus

     


    Для связи [mail]
    • Помечено в качестве ответа I.VorontsovModerator 17 января 2011 г. 8:06
    13 января 2011 г. 10:16
  • А не подскажите как сделать отрисовку, что бы заполняла выбранный Item в listView градиентом, то искал в MSDN Graphics.Gradient нет, и ничего похожего по названию тоже
    17 января 2011 г. 14:38
  • Вам нужно заполнять нужный прямоугольник градиентной заливкой. Т.е. рисовать его с помощью кистей LinearGradientBrush или PathGradientBrush. Пример:

    LinearGradientBrush linGrBrush = new LinearGradientBrush(
      new Point(0, 10),
      new Point(200, 10),
      Color.FromArgb(255, 255, 0, 0),  // Opaque red
      Color.FromArgb(255, 0, 0, 255)); // Opaque blue
    
    Pen pen = new Pen(linGrBrush);
    
    e.Graphics.DrawLine(pen, 0, 10, 200, 10);
    e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100);
    e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30);
    
    

     


    Для связи [mail]
    18 января 2011 г. 6:46
  • Не подскажите как правильно реализовать функцию заполнения градиентом, а то насколько я понимаю то что я я сделал неправильно, да и вообще лишено всякого смысла

    private: System::Void listView1_Paint(listView1, PaintEventArgs e)

     {

     LinearGradientBrush linGrBrush = new LinearGradientBrush(

     new Point(0, 10),

     new Point(200, 10),

     Color.FromArgb(255, 255, 0, 0),  // Opaque red

     Color.FromArgb(255, 0, 0, 255)); // Opaque blue

     

     Pen pen = new Pen(linGrBrush);

     

     e.Graphics.DrawLine(pen, 0, 10, 200, 10);

     e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100);

     e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30);

     }

    P.S. извините за такое огромное количество вопросов, просто я совсем недавно начал визуально программировать и возникает очень много ошибок, на которые могут ответить только здесь 

    18 января 2011 г. 12:04
  • Прочитайте MSDN про ListView.OwnerDraw , ListView.DrawItem , ListView.DrawSubItem .

    Для связи [mail]
    18 января 2011 г. 12:31