DevExpress控件使用小結


摘自: http://blog.sina.com.cn/s/blog_95cfa64601019wex.html

 

 

1.TextEditor(barEditItem)取文本
string editValue = barEditItem1.EditValue.ToString();    //錯誤,返回null
 
string editValue = ((DevExpress.XtraEditors.TextEdit)barEditItem).EditValue.ToString();    //正確,返回文本框內容
2.ComboBoxEdit(barEditItem)添加Item
string item = "comboboxItem1";
((DevExpress.XtraEditors.Repository.RepositoryItemComboBox)this.barEditItem.Edit).Items.Add(item);
3.ComboBoxEdit(barEditItem)取文本
string itemValue = this.barEditItem.EditValue.ToString();
 
4.Ribbon控件
 
//添加Page
DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage = new RibbonPage();
ribbonControl.Pages.Add(ribbonPage);
//添加Group
DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup = new RibbonPageGroup();
ribbonPage.Groups.Add(ribbonPageGroup);
//添加Button
DevExpress.XtraBars.BarButtonItem barButtonItem = new BarButtonItem();
ribbonPageGroup.ItemLinks.Add(barButtonItem);
//添加barSubItem
DevExpress.XtraBars.BarSubItem barSubItem = new BarSubItem();
ribbonPageGroup.ItemLinks.Add(barSubItem);
//barSubItem下添加Button
barSubItem.AddItem(barButtonItem);
 
 
//奇怪的刪除Page問題
while (this.ribbonControl.Pages.Count > 0)
{
     ribbonControl.Pages.Remove(ribbonControl.Pages[0]);    //調試正常,運行報異常
}
while (this.ribbonControl.Pages.Count > 0)
{
     ribbonControl.SelectedPage = ribbonControl.Pages[0];
     ribbonControl.Pages.Remove(ribbonControl.SelectedPage); //運行正常
}
//禁止F10鍵Tips
ribbonControl.Manager.UseF10KeyForMenu = false;
//DX按鈕
ApplicationIcon屬性改變圖標
右鍵 Add ApplicationMenu 添加evExpress.XtraBars.Ribbon.ApplicationMenu
 
5.HitInfo
 
//在Tab頁上點擊右鍵的事件響應
void xtraTabbedMdiManager_Event(object sender, MouseEventArgs e)
{
     if (e.Button == MouseButtons.Right && ActiveMdiChild != null)
     {
          DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hInfo = xtraTabbedMdiManager.CalcHitInfo(e.Location);
          //右鍵點擊位置:在Page上且不在關閉按鈕內
          if (hInfo.IsValid && hInfo.Page != null && !hInfo.InPageCloseButton)
          {
               this.popupMenu.ShowPopup(Control.MousePosition);//在鼠標位置彈出,而不是e.Location
          }
     }
}
//在ribbon上點擊右鍵的事件響應
private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e)
{
    //禁掉原系統右鍵菜單
    e.ShowCustomizationMenu = false;
    //右鍵位置:在barButtonItem上
    if (e.HitInfo != null
     && e.HitInfo.InItem
     && e.HitInfo.Item.Item is BarButtonItem)
    {
         this.popupMenu.ShowPopup(Control.MousePosition);
    }
    //右鍵位置:在barSubItem中的barButtonItem上
    else if (e.Link != null
          && e.Link.Item != null
          && e.Link.Item is BarButtonItem)
    {
         this.popupMenu.ShowPopup(Control.MousePosition);
    }
}
 
6.皮膚
 
//添加皮膚程序集后注冊皮膚
DevExpress.UserSkins.OfficeSkins.Register();
DevExpress.UserSkins.BonusSkins.Register();
//設置皮膚
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("Liquid Sky");    //若皮膚名稱錯誤則按系統默認設置(第一個皮膚)
//GalleryFilterMenuPopup事件設置彈出篩選菜單的“All Groups”為中文
private void rgbiSkins_GalleryFilterMenuPopup(object sender, GalleryFilterMenuEventArgs e)
{
    e.FilterMenu.ItemLinks[n].Caption = "所有皮膚";    //n=分組數+1
}
//GalleryInitDropDownGallery事件設置彈出皮膚列表的表頭“ALL Groups”為中文
private void rgbiSkins_GalleryInitDropDownGallery(object sender, InplaceGalleryEventArgs e)
{
    e.PopupGallery.FilterCaption = "所有皮膚";
}
 
7.dockManager
 
將視圖的狀態信息保存到xml文件
dockManager1.SaveLayoutToXml("..\\UserConfig\\ViewInfo.xml");
導出xml中保存的狀態信息
dockManager1.RestoreLayoutFromXml("..\\UserConfig\\ViewInfo.xml");
 
8.barManager
 
設置bar的字體與系統字體
barAndDockingController1.AppearancesBar.ItemsFont = new Font(this.Font.FontFamily, currentFontSize);
 
9.設置系統字體
 
DevExpress.Utils.AppearanceObject.DefaultFont = new Font(this.Font.FontFamily, currentFontSize);
 
10.treeView
 
為tree節點加右鍵菜單並選中該節點
        private void treeList1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                DevExpress.XtraTreeList.TreeListHitInfo hi = treeList1.CalcHitInfo(e.Location);
                if (hi.Node != null && hi.Node.ImageIndex == 5) //葉子節點的ImageIndex == 5
                {
                    TreeListNode node = treeList1.FindNodeByID(hi.Node.Id);
                    treeList1.FocusedNode = node;
 
                    this.popupMenu1.ShowPopup(MousePosition);
                }
            }
        }
 
 
一、皮膚
  DexExpress的控件都有自己的樣式,有不少的皮膚,然而怎樣讓一個System.Windows.Forms.Form窗口換膚了,有沒有辦法呢?用DexExpress是沒有什么簡單辦法的,如果你要讓窗體都換膚,只有用DevExpress.XtraEditors.XtraForm一條路了。用它后,還需在Pragram.cs中的Application.Run之前寫上一句:DevExpress.Skins.SkinManager.EnableFormSkins();這樣就差不多了。點此處見參考資料!
  二、樣式設置有訣竅
  DexExpress的控件都有一個LookAndFeel屬性,這個屬性有兩個屬性:SkinName、Style,但是,我們如果只設置這兩個,結果設置來設置去都沒有反映,這是怎么回事,DexExpress說,去看Demo吧,日,看demo是大海撈針啊,那么多屬性,誰曉得是哪兒出了問題。。怎么解決呢?LookAndFeel還有一個UseDefaultLookAndFeel屬性,它默認值是true,請將它設為false即可。這是什么原因呢?為什么要這么做呢?DexExpress有一個組件:DefaultLookAndFeel,它的用法是拖到窗體上就是了,然后你修改它的LookAndFeel屬性就是了,修改了它,那么此窗體上所有UseDefaultLookAndFeel為true的控件都用上了相同的樣式。DevExpress的這個思想是蠻好的。這樣做好處極大,再也不用一個控件一個控件地設置。有個別例外,就單獨設置。
  另外,我還注意到DevExpress有幾個類似的控件,如:
  DefaultToolTipControler、StyleController。它們的用意都集體管理界面風格。
  點此處進見參考資料!
  三、DexExpress的工具欄、菜單
  微軟的的工具欄、菜單欄太難看了。讓人煩悶。DexExpress也有。怎么使用呢?也有一些要注意的地方,這些問題demo都不會主動告訴我們的。
  從工具欄上拖個DevExpress.XtraBars.BarManage,拖上去后,它會自動生成三條DevExpress.XtraBars.Bar。DexExpress中,工具欄跟菜單是一個東西,都是建立在DevExpress.XtraBars.Bar基礎之上,DevExpress.XtraBars.Bar是工具欄圖標、菜單項的容器。它上面寫得明白:add,讓你點它,點它就可以創建菜單項、工具欄按鈕等等。但是,我遇到了麻煩,相信大伙跟我一樣,新建了一個以后,你輸入了名稱,按道理,你在其他地方點擊一下,就相當於確認創建了,但是,我發現,無論你鼠標怎么動,vs失去了響應。后來才搞清楚,原來要回車一下。這種確認方式跟以前的習慣很不一樣。我還以為vs死了。
              //禁止barManage右鍵顯示
              this.barManager1.AllowCustomization = false;       
              this.barManager1.AllowShowToolbarsPopup = false;
              //去除barManage右邊小三角 自定制
              this.barManager1.AllowQuickCustomization = false;

  四、選項卡式子窗口
  這個問題在前面已經講了,但是還有一個問題,怎樣實現雙擊選項卡時就關閉對應的窗口呢?就你Maxthon一樣。我也去看了XtraTabbedMdiManager的事件,只有mouseUp、mouseDown。經過一篇文章的啟發,得到了正確的解決方法(點此處看參考資料):
  第一步:在XtraTabbedMdiManager所在mdi父窗體中定義一個變量:
  private int clickTick = 0;
  第二步:注冊事件xtraTabbedMdiManager1_MouseDown,事件處理代碼如下:
/// <summary>
/// 雙擊標簽關閉窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void xtraTabbedMdiManager1_MouseDown(object sender, MouseEventArgs e)
{
DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hi = xtraTabbedMdiManager1.CalcHitInfo(new Point(e.X, e.Y));
if (hi.HitTest == DevExpress.XtraTab.ViewInfo.XtraTabHitTest.PageHeader)
{
if (clickTick == -1 || (System.Environment.TickCount - clickTick) > SystemInformation.DoubleClickTime)
{
clickTick = System.Environment.TickCount;
}
else
{
if ((System.Environment.TickCount - clickTick) < SystemInformation.DoubleClickTime)
{
//MessageBox.Show("DoubleClick: " + hi.Page.Text);
this.ActiveMdiChild.Close();
}
clickTick = -1;
}
}
}
  原理簡單,是通過計算兩個mouseDown之間的時間差來達到識別雙擊的目的。
  五、NotifyIcon的問題
  用了dev的菜單后,當然不能再去用ContextMenuStrip。如果用了ContextMenuStrip,那么軟件里面有兩種風格的菜單,多不雅觀啊。所以只能用devexpress帶的菜單了,dev提供三種菜單:
  DevExpress.XtraBars.Bar、ApplicationMenu、PopupMenu
  這三者當然就只能用PopuMenu了。怎么做托盤。DevExpress中並沒有提供,只能微軟的了。但是NotifyIcon只能綁定到ContextMenuStrip,受群里兄弟的啟發,手工顯示出來。問題解決,代碼如下:
  popupMenu1.ShowPopup(Cursor.Position);
  這句代碼寫在NotifyIcon的mouseup事件中,不能用e.x,e.y的方法取坐標,它們都返回0。注意,popupMenu只有在BarManage存在的時候才能編輯,所以還是要先拖個BarManage。
補充:
修改ribbon圖標
選擇 ribbon 控件,修改 ribbon.ApplicationIcon
 
對話框的使用
    對話框#region 對話框
        /// <summary>
        /// 確認對話框
        /// </summary>
        /// <param name="strString">提示內容</param>
        /// <returns>用戶點擊結果</returns>
        public DialogResult Confirm(string strString)
        {
            return DevExpress.XtraEditors.XtraMessageBox.Show(strString,"提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
        }
        /// <summary>
        /// 確認對話框
        /// </summary>
        /// <param name="strSting">提示內容</param>
        public void ShowMessage(string strSting)
        {
            DevExpress.XtraEditors.XtraMessageBox.Show(strSting,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }
        /// <summary>
        /// 確認刪除對話框
        /// </summary>
        /// /// <returns>用戶點擊結果</returns>
        public DialogResult ConfirmDelete()
        {
            return DevExpress.XtraEditors.XtraMessageBox.Show("確定要刪除嗎?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
        }
        #endregion
使用用例:
if(this.Confirm("確定要刪除嗎?") == DialogResult.Cancel)
                return;

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM