オーバーフローユーザーの皆さん、
一連のカスタムComboBoxコントロールを作成しました。これには、常にハードコードされたアイテムが含まれている必要があります。カスタムコントロールには、選択したアイテムに相当するEnumを返すGetEnumプロパティもあります。
このコントロールの簡単な例は、ComboBox_Booleanバージョンです。
public partial class ComboBox_Boolean : ComboBox
{
public ComboBox_Boolean()
{
Initialize();
}
public void Initialize()
{
this.Items.Clear();
foreach (string b in (new string[] { ">", ">=", "<=", "<", "=", "!="}))
this.Items.Add(b);
this.SelectedIndex = 0;
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
public BooleanType SelectedBoolean() { Get{//foo} Set{//foo}}
}
public Enum BooleanType {LT, LE, GE, GT, EQ, NE}
さて、これはかなり簡単で、うまく機能しているようです。
奇妙なことに、Designerはこれを理解し、Designerレベルでこれらのアイテムを再度追加しているようです。さらに奇妙なことに、初めてデザインビューを作成または開いたときに、アイテムが追加されているようです。私はそのパターンを完全には理解していません。
とにかく、要点は、設計コードは最終的に次のステートメントを取得するということです。
this.myBooleanDropDown.Items.AddRange(new object[] {
">",
">=",
"=",
"<=",
"<",
"!=",
">",
">=",
"=",
"<=",
"<",
"!="});
もちろん、これはかなり面倒です。私の質問には2つの部分があります。
1)なぜこれが起こっているのですか?
2)どうすればそれを防ぐことができますか?
this.Itemsプロパティをオーバーライドしてプライベートにするか、そうでなければ機能しないようにしてみましたが、エラーが発生しました。このカスタムコントロールを操作する唯一の方法は、SelectedBooleanプロパティを使用することです。