Ejemplo n.º 1
0
        private void UpdateOffsets(Graphics g)
        {
            myOffsets = new int[myPainters.Length];

            int offset = 0;

            for (int i = 0; i < myPainters.Length; i++)
            {
                IItemPainter painter = myPainters[i];

                myOffsets[i] = offset;
                int maxWidth = 0;

                foreach (ListViewItem item in myItems)
                {
                    Size size = painter.GetSize(item, g);

                    if (size.Width > maxWidth)
                    {
                        maxWidth = size.Width;
                    }
                }

                offset += maxWidth + SPACING;
            }

            myWidth             = offset;
            myOffsetsAreCorrect = true;
        }
Ejemplo n.º 2
0
        public void Draw(ListViewItem item, Graphics g, Rectangle rect)
        {
            if (!myOffsetsAreCorrect)
            {
                UpdateOffsets(g);
            }

            int startOffset = CalculateOffset(item);

            for (int i = 0; i < myPainters.Length; i++)
            {
                IItemPainter painter = myPainters[i];

                Size size      = painter.GetSize(item, g);
                int  offset    = myOffsets[i] + startOffset;
                int  endOffset = i == myPainters.Length - 1 ? rect.Width : myOffsets[i + 1];

                switch (myAlignments[i])
                {
                case ColumnAlignment.Right:
                    offset += (endOffset - offset) - size.Width;
                    break;

                case ColumnAlignment.Center:
                    offset += ((endOffset - offset) - size.Width) / 2;
                    break;
                }

                painter.Draw(item, g, new Rectangle(offset, 0, endOffset - offset, 0));
            }
        }
Ejemplo n.º 3
0
 public Size GetItemSize(ListViewItem item)
 {
     try
     {
         using (Graphics g = CreateGraphics())
         {
             return(myItemPainter.GetSize(item, g));
         }
     }
     catch (Exception ex)
     {
         System.Diagnostics.Trace.WriteLine("CustomListView.GetItemSize failed : " + ex, "UI");
         return(new Size(1, 1));
     }
 }
Ejemplo n.º 4
0
        protected override void OnMeasureItem(MeasureItemEventArgs e)
        {
            try
            {
                if (myItemPainter != null)
                {
                    Size size = myItemPainter.GetSize(Items[e.Index], e.Graphics);

                    e.ItemWidth  = size.Width;
                    e.ItemHeight = size.Height;
                }
                else
                {
                    base.OnMeasureItem(e);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("CustomListBox.MeasureItem failed : " + ex, "UI");
            }
        }