特定項目我有一個WinForms應用程序,我想知道是否有禁用ComboBox項不改變SelectedIndex屬性-1所有殘障值的更優雅的方式。禁用的組合框
我一直在使用Google和很多解決方案都涉及ASP.Net DropDownLists但這LINK看起來很有希望。我想我可能不得不建立自己的組合框控件,但在重新發明輪子之前,我想我會問在這裏是否有可能。
UPDATE
下面是最終的解決方案,這要歸功於阿里夫Eqbal:
//Add a Combobox to a form and name it comboBox1
//
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
this.comboBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.comboBox1_DrawItem);
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
}
private void Form1_Load(object sender, EventArgs e)
{
this.comboBox1.Items.Add("Test1");
this.comboBox1.Items.Add("Test2");
this.comboBox1.Items.Add("Test3");
this.comboBox1.Items.Add("Test4");
this.comboBox1.Items.Add("Test5");
this.comboBox1.Items.Add("Test6");
this.comboBox1.Items.Add("Test7");
}
Font myFont = new Font("Aerial", 10, FontStyle.Underline|FontStyle.Regular);
Font myFont2 = new Font("Aerial", 10, FontStyle.Italic|FontStyle.Strikeout);
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index == 1 || e.Index == 4 || e.Index == 5)//We are disabling item based on Index, you can have your logic here
{
e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), myFont2, Brushes.LightSlateGray, e.Bounds);
}
else
{
e.DrawBackground();
e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), myFont, Brushes.Black, e.Bounds);
e.DrawFocusRectangle();
}
}
void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex == 1 || comboBox1.SelectedIndex == 4 || comboBox1.SelectedIndex == 5)
comboBox1.SelectedIndex = -1;
}
}
}
ASP.NET =的WinForms,不看那裏。擴展基本ComboBox並不是非常困難(通常是爲了添加複選框或圖標或者什麼),但我不認爲有這樣的標準支持。 – 2012-07-12 04:52:38
你提到的鏈接去,如果你真的想給用戶的項目的感覺被禁用的方式。您可能想要將文本繪製爲灰色,您可能不想顯示選擇背景顏色等等,當然用戶仍然可以選擇該項目,因此您當然需要處理selectedIndexChanged並將selectedIndex設置爲-1。但是這個練習在視覺上會更具啓發性。 – 2012-07-12 06:25:06