I want to override the DrawItem function of the ListBox but I fail. I have tried various snippets from the web and also from msdn but somewhy it does not work. The sourcecode is just for testing so I does not care about good structure etc. I want a working script which I can learn from and possibly improve.
I am using MS VS 2015 RC and added events via the Form-Designer.
Currently I have following sourcecode. My log rte does not display the drawitem entry either - so it's not being added.
Form1.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace CustomFormElements
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.listBox1.Items.Add("Test");
this.listBox1.Items.Add("Test1");
this.listBox1.Items.Add("Test2");
this.listBox1.Items.Add("Test3");
this.listBox1.Items.AddRange( new Object[] { "Test4", "Test5", "Test6" });
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
private void AddToLog(string text)
{
this.richTextBox1.Text = this.richTextBox1.Text + text + "\r\n";
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
this.AddToLog("SelectedIndexChanged");
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
this.AddToLog("DrawItem");
bool isSelected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected);
if (e.Index > -1)
{
/* If the item is selected set the background color to SystemColors.Highlight
or else set the color to either WhiteSmoke or White depending if the item index is even or odd */
Color color = isSelected ? SystemColors.Highlight :
e.Index % 2 == 0 ? Color.Green : Color.SandyBrown;
// Background item brush
SolidBrush backgroundBrush = new SolidBrush(color);
// Text color brush
SolidBrush textBrush = new SolidBrush(e.ForeColor);
// Draw the background
e.Graphics.FillRectangle(backgroundBrush, e.Bounds);
// Draw the text
e.Graphics.DrawString(listBox1.GetItemText(listBox1.Items[e.Index]), e.Font, textBrush, e.Bounds, StringFormat.GenericDefault);
// Clean up
backgroundBrush.Dispose();
textBrush.Dispose();
}
e.DrawFocusRectangle();
}
private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
this.AddToLog("MeasureItem");
}
private void listBox1_Enter(object sender, EventArgs e)
{
this.AddToLog("Enter");
}
private void listBox1_Leave(object sender, EventArgs e)
{
this.AddToLog("Leave");
}
private void listBox1_Click(object sender, EventArgs e)
{
this.AddToLog("Click");
}
}
}
Form1.Designer.cs
namespace CustomFormElements
{
partial class Form1
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.listBox1 = new System.Windows.Forms.ListBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(13, 13);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(332, 303);
this.listBox1.TabIndex = 0;
this.listBox1.Click += new System.EventHandler(this.listBox1_Click);
this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
this.listBox1.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.listBox1_MeasureItem);
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
this.listBox1.Enter += new System.EventHandler(this.listBox1_Enter);
this.listBox1.Leave += new System.EventHandler(this.listBox1_Leave);
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(361, 13);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(479, 303);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1009, 475);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.listBox1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.RichTextBox richTextBox1;
}
}
C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...
In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.
C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.
C is more difficult to learn than JavaScript, but it's a valuable skill to have because most programming languages are actually implemented in C. This is because C is a “machine-level” language. So learning it will teach you how a computer works and will actually make learning new languages in the future easier.
According to MSDN for ListBox.DrawMode:
This event is used by an owner-drawn ListBox. The event is only raised when the DrawMode property is set to DrawMode.OwnerDrawFixed or DrawMode.OwnerDrawVariable. You can use this event to perform the tasks needed to draw items in the ListBox. If you have a variable-sized item (when the DrawMode property is set to DrawMode.OwnerDrawVariable), before drawing an item, the MeasureItem event is raised. You can create an event handler for the MeasureItem event to specify the size for the item that you are going to draw in your event handler for the DrawItem event.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With