// IListの実装を行う /// <summary> /// ドロップダウンを選択した時に選択値を設定してイベントを発生させる。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CandidateBox_SelectedValueChanged(object sender, EventArgs e) { // リストの初期表示で値が選択された時は走行させない, 候補が表示中に手入力で候補を決定した時は走行させない if (this.innerSelectedChanging) { return; } // DataSet または DataTable の場合 if (this.DataSource is DataSet || this.DataSource is DataTable) { var dt = (this.DataSource as DataTable) ?? (this.DataSource as DataSet)?.Tables[0]; var item = ((DataRowView)this.candidateBox.SelectedItem).Row; this.SelectedItem = item; this.SelectedValue = this.GetValue(item); this.SelectedIndex = dt.Rows.IndexOf(item); var cse = new CandidateSelectedEventArgs(this.SelectedItem, this.SelectedValue, this.candidateBox.Text, this.SelectedIndex); this.OnCandidateSelected(this, cse); return; } // IList の場合 var list = this.DataSource as IList; if (list != null) { var item = this.candidateBox.SelectedItem; this.SelectedItem = item; this.SelectedValue = this.GetValue(item); this.SelectedIndex = list.IndexOf(item); var cse = new CandidateSelectedEventArgs(this.SelectedItem, this.SelectedValue, this.candidateBox.Text, this.SelectedIndex); this.OnCandidateSelected(this, cse); return; } }
/// <summary> /// 候補の値が選択された時に発生します。 /// </summary> /// <param name="sender">呼出元オブジェクト。</param> /// <param name="e">CandidateSelectedEventArgs オブジェクト。</param> protected virtual void OnCandidateSelected(object sender, CandidateSelectedEventArgs e) { this.CandidateSelected?.Invoke(sender, e); }