5

「EditOnEnter」をtrueに設定した後もDataGridViewComboBoxCell、コンボボックスの下矢印部分をクリックしないと、2回クリックして開くことができます。

誰かがこれを修正する方法の手がかりを持っていますか?使用する独自のDataGridViewクラスがあるので、システム全体でこの問題を簡単に修正できます。いくつかのスマートイベントハンドラーを使用できます。

ありがとう。

4

4 に答える 4

6

DataGridViewのプロパティはすでにEditMode「EditOnEnter」に設定されているので、そのOnEditingControlShowingメソッドをオーバーライドするだけで、コンボボックスがフォーカスを受け取るとすぐにドロップダウンリストが表示されるようになります。

public class myDataGridView : DataGridView
{

    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        base.OnEditingControlShowing(e);

        if (e.Control is ComboBox) {
            SendKeys.Send("{F4}");
        }
    }

}

コントロールの編集コントロールDataGridViewが入力フォーカスを取得するたびに、上記のコードはそれがコンボボックスであるかどうかを確認します。もしそうなら、それは事実上F4キーを「押す」ので、ドロップダウン部分が拡張されます(コンボボックスにフォーカスがあるときに試してみてください!)。ちょっとしたハックですが、魅力のように機能します。

于 2010-11-28T12:53:15.183 に答える
4

キーストロークの送信を回避するため、このソリューションを使用しました。

OnCellClickメソッドをオーバーライドするか(サブクラス化する場合)、CellClickイベントをサブスクライブします(サブクラスとしてではなく、別のオブジェクトからDGVを変更する場合)。

protected override void OnCellClick(DataGridViewCellEventArgs e)
{
    // Normally the user would need to click a combo box cell once to 
    // activate it and then again to drop the list down--this is annoying for 
    // our purposes so let the user activate the drop-down with a single click.
    if (e.ColumnIndex == this.Columns["YourDropDownColumnName"].Index
        && e.RowIndex >= 0
        && e.RowIndex <= this.Rows.Count)
    {
        this.CurrentCell = this[e.ColumnIndex, e.RowIndex];
        this.BeginEdit(false);
        ComboBox comboBox = this.EditingControl as ComboBox;
        if (comboBox != null)
        {
            comboBox.DroppedDown = true;
        }
    }

    base.OnCellContentClick(e);
}
于 2012-12-18T19:22:57.773 に答える
1
    protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
    {
        base.OnEditingControlShowing(e);
        DataGridViewComboBoxEditingControl dataGridViewComboBoxEditingControl = e.Control as DataGridViewComboBoxEditingControl;
        if (dataGridViewComboBoxEditingControl != null)
        {
            dataGridViewComboBoxEditingControl.GotFocus += this.DataGridViewComboBoxEditingControl_GotFocus;
            dataGridViewComboBoxEditingControl.Disposed += this.DataGridViewComboBoxEditingControl_Disposed;
        }
    }

    private void DataGridViewComboBoxEditingControl_GotFocus(object sender, EventArgs e)
    {
        ComboBox comboBox = sender as ComboBox;
        if (comboBox != null)
        {
            if (!comboBox.DroppedDown)
            {
                comboBox.DroppedDown = true;
            }
        }
    }

    private void DataGridViewComboBoxEditingControl_Disposed(object sender, EventArgs e)
    {
        Control control = sender as Control;
        if (control != null)
        {
            control.GotFocus -= this.DataGridViewComboBoxEditingControl_GotFocus;
            control.Disposed -= this.DataGridViewComboBoxEditingControl_Disposed;
        }
    }
于 2014-02-23T02:07:19.557 に答える
0

SendKeysの問題を回避するには、シングルクリックで[開く]ドロップダウン(データグリッドビュー内)の項目から解決策を試してください。基本的に、コンボボックスのEnterイベントへのOnEditingControlShowingフックで、Enterイベントハンドラーで、ComboBox.DroppedDown=trueを設定します。それは同じ効果があるようですが、@CodyGrayが言及する副作用はありません。

于 2012-02-02T16:32:05.200 に答える