2

私はwinform DevExpressライブラリを使用しています。PopupContainerEdit に基づいてコントロールを作成する必要がありますが、このコントロールには、フォーカスがあるとき、ポップアップが開き、フォーカスが失われたときにポップアップが閉じるなどの動作が必要です。

これは私が使用しているコードですが、フォーカスを取得するとポップアップが消えます。

public class HelpEdit : PopupContainerEdit {
    private PopupContainerControl _container;
    private GridControl _gridControl;
    private GridView _gridView;

    [DefaultValue("")]
    [DXCategory("Data")]
    [AttributeProvider(typeof(IListSource))]
    public object Datasource {
        get { return _gridControl.DataSource; }
        set { _gridControl.DataSource = value; }
    }

    public HelpEdit() : base() {
        _container = new PopupContainerControl();
        this.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
        this._gridControl = new GridControl();
        this._gridControl.Dock = DockStyle.Fill;
        this._gridView = new GridView(_gridControl);
        _container.Controls.Add(_gridControl);
        _container.Size = new Size(this.Width, 250);

        this.Properties.PopupControl = _container;
        this.Properties.PopupControl.Size = new Size(this.Width, 250);
    }
    protected override void OnGotFocus(EventArgs e) {
        base.OnGotFocus(e);
        this.ShowPopup();
    }
    protected override void OnLostFocus(EventArgs e) {
        base.OnLostFocus(e);
        this.ClosePopup();
    }
}
4

1 に答える 1

3

ポップアップコンテナcontrol(_container)がフォーカスを取得するとすぐにコードによって閉じられるため、ポップアップは表示されなくなります。base.OnLostFocusのメソッドにPopupContainerEditはポップアップを閉じるための正しいコードがすでに含まれているため、OnLostFocus()オーバーライド内でポップアップを閉じないでください。または、次のコードを使用して、条件付きでポップアップを閉じます。

protected override void OnLostFocus(EventArgs e) {
    if(IsPopupOpen && !EditorContainsFocus) 
        ClosePopup(PopupCloseMode.Immediate);
    base.OnLostFocus(e);
}
于 2012-12-20T04:51:25.530 に答える