First of all you need a new listview control cuz current one does not have ItemAdded event, so;
public class MyListView : ListView
{
public event EventHandler ItemAdded;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case 0x1007:
if (ItemAdded != null)
ItemAdded(this, null);
break;
case 0x104D:
if (ItemAdded != null)
ItemAdded(this, null);
break;
case 0x1008:
System.Diagnostics.Debug.WriteLine("Item removed");
break;
default:
break;
}
}
}
then put it in your usercontrol, and your usercontrol should be something like this;
public partial class ReadDataUserControl : UserControl
{
public event EventHandler ItemAddedToListView;
public ReadDataUserControl()
{
InitializeComponent();
myListView1.ItemAdded += this.myListView1_ItemAdded;
}
private void myListView1_ItemAdded(object sender, EventArgs e)
{
if (ItemAddedToListView != null)
ItemAddedToListView(this, e);
}
...
Then in your form (where tabcontrol is located);
public partial class FormHome : Form
{
public FormHome()
{
InitializeComponent();
readDataUserControl1.ItemAddedToListView += readDataUserControl1_ItemAddedToListView;
}
private void readDataUserControl1_ItemAddedToListView(object sender, EventArgs e)
{
if ((sender as Control).Parent is TabPage)
{
(sender as Control).Parent.Tag = Color.Blue;
tabControl1.Refresh();
}
}
Change your tabcontrol's draw mode to OwnerDrawFixed we should draw tabs manually cuz headers don't have forecolor property;
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Brush _TextBrush;
TabPage _TabPage = tabControl1.TabPages[e.Index];
Rectangle _TabBounds = tabControl1.GetTabRect(e.Index);
e.DrawBackground();
if (tabControl1.TabPages[e.Index].Tag != null)
{
_TextBrush = new SolidBrush((Color)tabControl1.TabPages[e.Index].Tag);
}
else
{
_TextBrush = new System.Drawing.SolidBrush(e.ForeColor);
}
Font _TabFont = e.Font;
StringFormat stringFlags = new StringFormat();
stringFlags.Alignment = StringAlignment.Center;
stringFlags.LineAlignment = StringAlignment.Center;
g.DrawString(tabControl1.TabPages[e.Index].Text, _TabFont, _TextBrush,
_TabBounds, new StringFormat(stringFlags));
}
Set tag of tabpage to null and refresh tabcontrol to return to default color.