In einer Listbox Zeilen ohne E-Mail Adresse grau darstellen

22/09/2009 - 21:14 von Tamara Mikes | Report spam
Salü alle zusammen

In einer DataTable habe ich Datensàtze mit den Spalten ID, AnzeigeName und
EMailAdresse. In einer Listbox lasse ich die den AnzeigeName anzeigen. Nun
möchte ich, dass alle Zeilen welche die Spalte EMailAdresse leer ist, grau
sind, die anderen normal, also schwarz. Wie kann ich das mit WinForms lösen
(mit WPF wüsste ich ja wie)?

Besten Dank für Inputs.

Viele Grüsse
Tamara
 

Lesen sie die antworten

#1 Frank Dzaebel
22/09/2009 - 22:28 | Warnen spam
Hallo Tamara,

In einer DataTable habe ich Datensàtze mit den Spalten ID,
AnzeigeName und EMailAdresse. In einer Listbox lasse ich die den
AnzeigeName anzeigen. Nun möchte ich, dass alle Zeilen welche die
Spalte EMailAdresse leer ist, grau sind, die anderen normal, also
schwarz. Wie kann ich das mit WinForms lösen (mit WPF wüsste ich ja
wie)?



Ansatz zum Beispiel analog folgendem rudimentàren Beispiel:

DataTable dt = new DataTable();

private void Form1_Load(object sender, EventArgs e)
{
dt.Columns.Add("Email");
var cs = CultureInfo.GetCultures(CultureTypes.NeutralCultures);
for (int i = 0; i < cs.Length; i++)
dt.Rows.Add(cs[i].DisplayName + "." + cs[i].Name +
((i % 2 == 0) ? "@Firma.de" : "sonstwasDE"));
listBox1.DataSource = dt;
listBox1.DisplayMember = "Email";
listBox1.DrawMode = DrawMode.OwnerDrawVariable;
listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);
lstFont = listBox1.Font;
}

Font lstFont;
Brush nonEmailBrush = new SolidBrush(Color.LightGray);
Brush emailBrush = new SolidBrush(Color.Black);

void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground(); e.DrawFocusRectangle();
string txt = dt.Rows[e.Index][0].ToString();
if (IsEmail(txt))
e.Graphics.DrawString(txt, lstFont, emailBrush, e.Bounds);
else
e.Graphics.DrawString(txt, lstFont, nonEmailBrush, e.Bounds);
}

/// <summary>Sehr rudimentàre Email-Prüfung.</summary>
bool IsEmail(string email)
{
if (String.IsNullOrEmpty(email)) return false;
string localPartCharset = @"[0-9a-zA-Z!#$%*/?|\^{}`~&'+\-=_]";
string domainPartCharset = @"[0-9a-zA-Z\-]";
string expr = String.Format(@"^{0}+(\.{0}+)*@{1}+(\.{1}+)*",
localPartCharset, domainPartCharset);
return Regex.IsMatch(email, expr);
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen