3

私のカスタムComboBoxソースは以下のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows.Forms;

namespace IHWinUtility
{
    public class IHComboBox : ComboBox
    {
        private IHComboBoxItems _ihComboBoxItems;

        public IHComboBox()
        {
            this.DropDownStyle = ComboBoxStyle.DropDownList;
            _ihComboBoxItems = new IHComboBoxItems(this);
        }

        new public IHComboBoxItems Items
        {
            get { return _ihComboBoxItems; }
            set { _ihComboBoxItems = (IHComboBoxItems)value; }
        }

        new public string SelectedValue
        {
            get { return this.SelectedItem == null ? "" : ((IHComboBoxItem)this.SelectedItem).Value.ToString(); }
        }
    }


    public class IHComboBoxItems : ComboBox.ObjectCollection
    {
        public IHComboBox _ihComboBox;

        public IHComboBoxItems(IHComboBox owner) : base(owner)
        {
            _ihComboBox = owner;
        }

        public int Add(string Text, object Value)
        {
            int _retValue = 0;

            IHComboBoxItem _item = new IHComboBoxItem();
            _item.Text = Text;
            _item.Value = Value;
            _ihComboBox.Items.Add(_item);

            _retValue = _ihComboBox.Items.Count;

            return _retValue;
        }

        new public void Insert(int index, object item)
        {

        }
    }


    public class IHComboBoxItem
    {
        public string Text { get; set; }
        public object Value { get; set; }

        public override string ToString()
        {
            return Text;
        }
    }
}

そして、私は以下のようにそのコンボボックスにいくつかのデータを追加しました:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.ihComboBox1.Items.Add("Text1", "Value1");
    }

それはうまくいきました。Text1がコンボボックスにバインドされているのがわかります。しかし、問題は、コンボボックスの矢印をクリックしてselectedItemを変更すると、以下のエラーがスローされることです。

System.ArgumentOutOfRangeException was unhandled Message="InvalidArgument=Value of '0' is not valid for 'index'.
Parameter name: index
   at: System.ArgumentOutOfRangeException System.Windows.Forms.ComboBox.ObjectCollection.get_Item(Int32 index)
   at: System.Windows.Forms.ComboBox.get_SelectedItem()
   at: System.Windows.Forms.ComboBox.get_Text()
   at: System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
   at: System.Windows.Forms.ComboBox.WndProc(Message& m)
   at: System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at: System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

誰かがこのエラーで私を助けることができますか?

4

2 に答える 2

0

選択した値で、値を強制しようとしています。しかし、その値はコレクションにありません。

于 2012-12-11T09:36:53.327 に答える