我有一個困境,我有一個表單,其中包含一些組合框,其中包含可能在某些情況下無效/過時的信息/選項/項目。在winforms組合框中顏色個別項目?
我不能簡單地從項目中刪除過時的信息,但我確實希望在選項無效時給用戶一個可視的提示。
我正在考慮着色項目(可能是紅色),以表明&何時無效。我不一定需要阻止用戶選擇無效選項,只需讓他們直觀地意識到他們正在這樣做。
可以這樣做嗎?你可以 - dyamically - 改變組合框項目的顏色(u)r?
謝謝,
我有一個困境,我有一個表單,其中包含一些組合框,其中包含可能在某些情況下無效/過時的信息/選項/項目。在winforms組合框中顏色個別項目?
我不能簡單地從項目中刪除過時的信息,但我確實希望在選項無效時給用戶一個可視的提示。
我正在考慮着色項目(可能是紅色),以表明&何時無效。我不一定需要阻止用戶選擇無效選項,只需讓他們直觀地意識到他們正在這樣做。
可以這樣做嗎?你可以 - dyamically - 改變組合框項目的顏色(u)r?
謝謝,
您可以嘗試ComboBox的DrawItem事件。將日期保留在列表中,並將其與身份證件進行比較並刷新項目。
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// Draw the background
e.DrawBackground();
// Get the item text
string text = ((ComboBox)sender).Items[e.Index].ToString();
// Determine the forecolor based on whether or not the item is selected
Brush brush;
if (YourListOfDates[e.Index] < DateTime.Now)// compare date with your list.
{
brush = Brushes.Red;
}
else
{
brush = Brushes.Green;
}
// Draw the text
e.Graphics.DrawString(text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y);
}
觸發此事件(感謝@Bolu)
您需要ComboBox.DrawMode 改變OwnerDrawFixed/OwnerDrawVariable到 火comboBox_DrawItem
感謝您的編輯。 '//根據項目是否被選擇來確定前景顏色'正在拋棄我一點,但似乎沒有下面的代碼來支持選擇或不......我不認爲我真的需要這個功能,只是想知道這是一個C&P錯誤還是我需要注意的事情? – Mike 2011-01-12 10:26:17
///The ComboBoxCustom Control:
using System;
using System.Windows.Forms;
using System.Drawing;
namespace TyroDeveloper
{
public class ComboBoxCustom:ComboBox
{
public ComboBoxCustom() {
this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
e.DrawBackground();
ComboBoxItem item = (ComboBoxItem)this.Items[e.Index];
Brush brush = new SolidBrush(item.ForeColor);
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{ brush = Brushes.Yellow; }
e.Graphics.DrawString(item.Text, this.Font, brush, e.Bounds.X, e.Bounds.Y);
}
}
public class ComboBoxItem
{
public ComboBoxItem() { }
public ComboBoxItem(string pText, object pValue)
{
text = pText; val = pValue;
}
public ComboBoxItem(string pText, object pValue, Color pColor)
{
text = pText; val = pValue; foreColor = pColor;
}
string text = "";
public string Text {
get { return text; } set { text = value; }
}
object val;
public object Value {
get { return val; } set { val = value; }
}
Color foreColor = Color.Black;
public Color ForeColor {
get { return foreColor; } set { foreColor = value; }
}
public override string ToString()
{
return text;
}
}
}
//To add the items:
comboBoxCustom1.Items.Add(new ComboBoxItem("México","0",Color.Green));
comboBoxCustom1.Items.Add(new ComboBoxItem("USA", "1", Color.Blue));
comboBoxCustom1.Items.Add(new ComboBoxItem("China", "2", Color.Red));
的源url頁面: http://www.tyrodeveloper.com/2012/04/color-in-combobox-item.html
Changing color of combobox back color
您可以使用此代碼更改組合框的背景顏色。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Comboboxrenklendir
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void cmbrenkli_DrawItem(object sender, DrawItemEventArgs e)
{
Color HighlightColor = Color.Red;
if (e.Index >=0)
{
//int sayi = cmbrenkli.Items.Count;
string deger = cmbrenkli.Items[e.Index].ToString();
if (deger == "30"|| deger == "50")
{
e.Graphics.FillRectangle(new SolidBrush(HighlightColor), e.Bounds);
}
e.Graphics.DrawString(cmbrenkli.Items[e.Index].ToString(), e.Font, new SolidBrush(cmbrenkli.ForeColor), new Point(e.Bounds.X, e.Bounds.Y));
e.DrawFocusRectangle();
}
}
private void Form1_Load(object sender, EventArgs e)
{
cmbrenkli.Items.Add("10");
cmbrenkli.Items.Add("20");
cmbrenkli.Items.Add("30");
cmbrenkli.Items.Add("40");
cmbrenkli.Items.Add("50");
}
}
}
該死的,我不會重寫默認的項目繪製行爲。必須採取除了ComboBox以外的其他東西。 – Bitterblue 2013-10-30 09:36:24