私はWinForms Appを持っており、無効なすべての値に対してSelectedIndexプロパティ-1を変更せずに、よりうまくコンボボックスアイテムを無効にする方法があるのだろうかと思いました。Combobox内の特定のアイテムを無効にする
私はグーグルであり、多くのソリューションにはASP.Net DropDownListsが含まれていますが、このLINKは有望です。私は自分自身のComboBoxコントロールを構築する必要があるかもしれないと思うが、ホイールを再発明する前に、もし可能ならここで尋ねる。私はあなたがコンボボックスを持っていると仮定し
:
//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を拡張するのは大変難しいことではありませんが(通常、チェックボックスやアイコンなどを追加するために行われます)、標準的なサポートはないと思います。 –
あなたが本当にユーザーにアイテムの使用感を与えたい場合は、あなたが言及したリンクがあります。テキストを灰色で描画したい場合や、選択範囲のバックカラーなどを表示したくない場合もあります。もちろん、ユーザーはその項目を選択できるので、もちろんselectedIndexChangedを処理し、selectedIndexを-1に設定する必要があります。しかし、視覚的には運動をすることが示唆されます。 –