2012-12-19 154 views
2

Im'm使用winform DevExpress庫。 現在需要創建一個基於PopupContainerEdit的控件,但該控件必須具有某些行爲,例如焦點時,彈出窗口打開以及關閉彈出窗口時丟失焦點。Devexpress PopupContainerEdit彈出窗口總是打開

這是我使用的代碼,但獲得焦點後彈出dessapears。

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(); 
    } 
} 

回答

3

你彈出消失,因爲它只要在彈出的容器控件(_container)關閉您的代碼得到了集中本身。您不應該在OnLostFocus()覆蓋內關閉彈出窗口,因爲PopupContainerEditbase.OnLostFocus方法已包含關閉彈出窗口的正確代碼。或者使用以下代碼有條件地關閉彈出窗口:

protected override void OnLostFocus(EventArgs e) { 
    if(IsPopupOpen && !EditorContainsFocus) 
     ClosePopup(PopupCloseMode.Immediate); 
    base.OnLostFocus(e); 
}