Leadtools.WinForms Namespace > RasterImageList Class : DrawItem Event |
public event EventHandler<RasterImageListDrawItemEventArgs> DrawItem
'Declaration Public Event DrawItem As EventHandler(Of RasterImageListDrawItemEventArgs)
'Usage Dim instance As RasterImageList Dim handler As EventHandler(Of RasterImageListDrawItemEventArgs) AddHandler instance.DrawItem, handler
public: event EventHandler<RasterImageListDrawItemEventArgs^>^ DrawItem
The event handler receives an argument of type RasterImageListDrawItemEventArgs containing data related to this event. The following RasterImageListDrawItemEventArgs properties provide information specific to this event.
Property | Description |
---|---|
Graphics | The Graphics object into which the item should be drawn. |
Item | The RasterImageListItem to draw. |
When you set the ViewStyle property to RasterImageListViewStyle.OwnerDraw, the RasterImageList control will fire the DrawItem event for each event that needs to be drawn. The RasterImageListDrawItemEventArgs argument passed to a DrawItem event handler provides a System.Drawing.Graphics object that enables you to perform drawing and other graphical operations on the surface of the RasterImageList along with the RasterImageListItem object that needs to be drawn.
Imports Leadtools.WinForms Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.Drawing Private Class MyForm3 : Inherits Form Private imageList As RasterImageList Private codecs As RasterCodecs Public Sub New(ByVal title As String) Text = title ' Set the size of the form Size = New Size(400, 200) ' Create a new RasterImageList control imageList = New RasterImageList() imageList.Dock = DockStyle.Fill imageList.SelectionMode = RasterImageListSelectionMode.Single imageList.Size = Size Controls.Add(imageList) imageList.BringToFront() codecs = New RasterCodecs() ' Create three items Dim imagesPath As String = LEAD_VARS.ImagesDir For i As Integer = 0 To 2 ' Load the image Dim index As Integer = i + 1 Dim imageFileName As String = Path.Combine(imagesPath, "ImageProcessingDemo\Image" & index.ToString() & ".cmp") Dim image As RasterImage = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1) Dim item As RasterImageListItem = New RasterImageListItem(image, 1, "Item" & index.ToString()) ' Select the first item If i = 0 Then item.Selected = True End If ' Add the item to the image list imageList.Items.Add(item) Next i ' Change the item size imageList.ItemSize = New Size(200, 200) ' Change the item image size imageList.ItemImageSize = New Size(120, 120) ' We are going to draw the items ourselves imageList.ViewStyle = RasterImageListViewStyle.OwnerDraw ' Add a handler to the DrawItem event AddHandler imageList.DrawItem, AddressOf rasterImageList_DrawItem ' Add the RasterImageList to the control collection. Controls.Add(imageList) End Sub Private Sub rasterImageList_DrawItem(ByVal sender As Object, ByVal e As RasterImageListDrawItemEventArgs) Dim item As RasterImageListItem = e.Item Dim imageList As RasterImageList = item.ImageList Dim g As Graphics = e.Graphics ' get the item rectangle Dim rc As Rectangle = imageList.GetItemRectangle(item) ' sanity check If rc.IsEmpty Then Return End If ' we want to draw a 1 pixel black rectangle around the item ' then we fill the inside of the rectangle with white if the item ' is not selected or lightgray if it is g.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width - 1, rc.Height - 1) ' we used up 1 pixel rc.Inflate(-1, -1) Dim b As Brush If item.Selected Then b = Brushes.LightGray Else b = Brushes.White End If g.FillRectangle(b, rc) ' calculate the rectangles for image and text If imageList.ShowItemText Then ' text is visible ' draw the text at the bottom of the item Dim textHeight As Integer = CInt(g.MeasureString("WWW", imageList.Font).Height + 4) Dim textRect As Rectangle = Rectangle.FromLTRB(rc.Left, rc.Bottom - textHeight, rc.Right, rc.Bottom) If (Not textRect.IsEmpty) Then Dim sf As StringFormat = New StringFormat() sf.Alignment = StringAlignment.Center sf.LineAlignment = StringAlignment.Center sf.Trimming = StringTrimming.EllipsisPath sf.FormatFlags = StringFormatFlags.NoWrap g.DrawString(item.Text, imageList.Font, Brushes.Black, textRect, sf) sf.Dispose() ' we need to update the item rectangle for the space ' we used up to draw the text rc.Height -= textRect.Height End If End If ' rc is the image rectangle If (Not rc.IsEmpty) Then ' now rc holds the rectangle to draw the image into ' first, set the correct page Dim savePage As Integer = -1 If item.Image.Page <> item.Page Then ' the page is different ' save current image page so we can set it back when we are done savePage = item.Image.Page ' disable the image events, we are going to set the page back, ' so we do not want anybody subscribing to this image Changed ' event to know we changed it. item.Image.DisableEvents() ' set new page item.Image.Page = item.Page End If Try ' we want to center the image into whatever left of rc Dim itemImageSize As Size = imageList.ItemImageSize Dim imageRect As Rectangle = New Rectangle(rc.Left + (rc.Width - itemImageSize.Width) \ 2, rc.Top + (rc.Height - itemImageSize.Height) \ 2, _ itemImageSize.Width, itemImageSize.Height) ' we want to keep the aspect ratio imageRect = RasterImageList.GetFixedAspectRatioImageRectangle(item.Image.ImageWidth, item.Image.ImageHeight, imageRect) ' draw the image Dim lRect As LeadRect = New LeadRect(imageRect.Left, imageRect.Top, imageRect.Width, imageRect.Height) RasterImagePainter.Paint(item.Image, e.Graphics, lRect, imageList.PaintProperties) ' finally, draw a black rectangle around the image imageRect.Inflate(1, 1) g.DrawRectangle(Pens.Black, imageRect.Left, imageRect.Top, imageRect.Width - 1, imageRect.Height - 1) Finally ' reset the old page If savePage <> -1 Then item.Image.Page = savePage ' re-enable the events item.Image.EnableEvents() End If End Try End If End Sub End Class Public Sub RasterImageList_DrawItem(ByVal title As String) Dim form As MyForm3 = New MyForm3(title) form.ShowDialog() End Sub Public NotInheritable Class LEAD_VARS Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" End Class
using Leadtools.WinForms; using Leadtools; using Leadtools.Codecs; using Leadtools.Drawing; class MyForm3 : Form { RasterImageList imageList; RasterCodecs codecs; public MyForm3(string title) { Text = title; // Set the size of the form Size = new Size(400, 200); // Create a new RasterImageList control imageList = new RasterImageList(); imageList.Dock = DockStyle.Fill; imageList.SelectionMode = RasterImageListSelectionMode.Single; imageList.Size = Size; Controls.Add(imageList); imageList.BringToFront(); codecs = new RasterCodecs(); // Create three items string imagesPath = LEAD_VARS.ImagesDir; for(int i = 0; i < 3; i++) { // Load the image int index = i + 1; string imageFileName = Path.Combine(imagesPath, @"ImageProcessingDemo\Image" + index.ToString() + ".cmp"); RasterImage image = codecs.Load(imageFileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1); RasterImageListItem item = new RasterImageListItem(image, 1, "Item" + index.ToString()); // Select the first item if(i == 0) item.Selected = true; // Add the item to the image list imageList.Items.Add(item); } // Change the item size imageList.ItemSize = new Size(200, 200); // Change the item image size imageList.ItemImageSize = new Size(120, 120); // We are going to draw the items ourselves imageList.ViewStyle = RasterImageListViewStyle.OwnerDraw; // Add a handler to the DrawItem event imageList.DrawItem += new EventHandler<RasterImageListDrawItemEventArgs>(rasterImageList_DrawItem); // Add the RasterImageList to the control collection. Controls.Add(imageList); } private void rasterImageList_DrawItem(object sender, RasterImageListDrawItemEventArgs e) { RasterImageListItem item = e.Item; RasterImageList imageList = item.ImageList; Graphics g = e.Graphics; // get the item rectangle Rectangle rc = imageList.GetItemRectangle(item); // sanity check if(rc.IsEmpty) return; // we want to draw a 1 pixel black rectangle around the item // then we fill the inside of the rectangle with white if the item // is not selected or lightgray if it is g.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width - 1, rc.Height - 1); // we used up 1 pixel rc.Inflate(-1, -1); Brush b; if(item.Selected) b = Brushes.LightGray; else b = Brushes.White; g.FillRectangle(b, rc); // calculate the rectangles for image and text if(imageList.ShowItemText) { // text is visible // draw the text at the bottom of the item int textHeight = (int)(g.MeasureString("WWW", imageList.Font).Height + 4); Rectangle textRect = Rectangle.FromLTRB( rc.Left, rc.Bottom - textHeight, rc.Right, rc.Bottom); if(!textRect.IsEmpty) { StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; sf.Trimming = StringTrimming.EllipsisPath; sf.FormatFlags = StringFormatFlags.NoWrap; g.DrawString( item.Text, imageList.Font, Brushes.Black, textRect, sf); sf.Dispose(); // we need to update the item rectangle for the space // we used up to draw the text rc.Height -= textRect.Height; } } // rc is the image rectangle if(!rc.IsEmpty) { // now rc holds the rectangle to draw the image into // first, set the correct page int savePage = -1; if(item.Image.Page != item.Page) { // the page is different // save current image page so we can set it back when we are done savePage = item.Image.Page; // disable the image events, we are going to set the page back, // so we do not want anybody subscribing to this image Changed // event to know we changed it. item.Image.DisableEvents(); // set new page item.Image.Page = item.Page; } try { // we want to center the image into whatever left of rc Size itemImageSize = imageList.ItemImageSize; Rectangle imageRect = new Rectangle( rc.Left + (rc.Width - itemImageSize.Width) / 2, rc.Top + (rc.Height - itemImageSize.Height) / 2, itemImageSize.Width, itemImageSize.Height); // we want to keep the aspect ratio imageRect = RasterImageList.GetFixedAspectRatioImageRectangle( item.Image.ImageWidth, item.Image.ImageHeight, imageRect); // draw the image LeadRect lRect = new LeadRect(imageRect.Left, imageRect.Top, imageRect.Width, imageRect.Height); RasterImagePainter.Paint(item.Image, e.Graphics, lRect, imageList.PaintProperties); // finally, draw a black rectangle around the image imageRect.Inflate(1, 1); g.DrawRectangle( Pens.Black, imageRect.Left, imageRect.Top, imageRect.Width - 1, imageRect.Height - 1); } finally { // reset the old page if(savePage != -1) { item.Image.Page = savePage; // re-enable the events item.Image.EnableEvents(); } } } } } public void RasterImageList_DrawItem(string title) { MyForm3 form = new MyForm3(title); form.ShowDialog(); } static class LEAD_VARS { public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; }