C#使用Panel實現窗體動態側邊欄_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:減少.NET應用程序內存占用的一則實踐
      最近一周比較忙,主要的工作內容是在做一個叫鍵盤精靈的東西,簡單來講就是將很多數據放到內存中,對這些數據進行快速檢索,然后找出根據輸入條件最匹配的10條記錄并予以展示。具體和下面兩款炒股軟件的相關功能類似: 數據以文本形式存在文件中,且數據量較大,有近20

      可以實現側邊欄的展開、隱藏和鎖定的功能。添加的側邊欄默認是不顯示的通過鼠標的懸停事件MouseHover來觸發展開動作。側邊欄實際上是一個窗體或者是容器,實現展開的動作必須在一個時間段內逐步的增加寬度,我采用Panel作為容器的載體,在一個線程中逐步增加Panel的Width屬性。隱藏,主要使用的是Panel的Visible屬性來實現,隱藏條件的判斷是通過判斷鼠標位置是不是在側邊欄的邊界之外來實現的。鎖定,是使Panel始終處于顯示的狀態,使隱藏Panel的函數不執行來實現的。
      界面

      wps_clip_image-11395

      相關代碼:
      展開:
      private void toolStripButton2_MouseHover(object sender, EventArgs e)
      {
      //鼠標懸停事件,展開
      if (!this.panel2.Visible) //panel2為側邊欄的容器
      {
      Thread ts = new Thread(new ParameterizedThreadStart(TaskShowPanel));
      ts.Is true; //設置為后臺線程
      ts.Priority = ThreadPriority.Normal; //設置優先級
      ts.Start((Object)245); //Panel展開寬度245
      }
      }
      //定義的線程執行函數
      private void TaskShowPanel(Object ParObject)
      {
      int w = (int)ParObject;
      for (int i = 0; i <= w; i++)
      {
      ShowPanel(this.panel2, i);
      }
      }
      private delegate void SetTextCallback(Panel p1, int w);
      /// <summary>
      /// 展開動作
      /// </summary>
      /// <param name="p1">panel容器</param>
      /// <param name="w">寬度</param>
      private void ShowPanel(Panel p1,int w)
      {
      //跨線程訪問
      try
      {
      if (p1.InvokeRequired)
      {
      SetTextCallback d = new SetTextCallback(ShowPanel);
      p1.Invoke(d, new Object[] { p1, w });
      }
      else
      {
      p1.Width = w;
      if (!p1.Visible)
      {
      p1.Visible = true;
      }
      }
      }
      catch (Exception ex)
      {
      MessageBox.Show(ex.Message, "ShowPanel函數執行錯誤");
      }
      }
      隱藏:
      private void listView1_MouseMove(object sender, MouseEventArgs e)
      {
      Point panelPoint = this.PointToClient(Control.MousePosition); //鼠標當前位置
      //this.panel2.Location.X panel2的起始位置
      //this.panel2.Width panel2的寬度
      if (this.panel2.Visible && (panelPoint.X > (this.panel2.Location.X + this.panel2.Width)))
      {
      this.panel2.Visible = false;
      }
      }
      鎖定:
      private void button1_Click(object sender, EventArgs e)
      {
      //刪除隱藏事件
      this.listView1.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.listView1_MouseMove);
      }

      分享:進程性能計數器已禁用的解決辦法
      未處理的異常:進程性能計數器已禁用 調試出錯: 未處理的異常: System.InvalidOperationException: 進程性能計數器已禁用,因此無法執行所請求的操作 問題解決: 方法一: 這時只要修復一下windows的性能計數器即可。 具體方法:在運行中輸入:lodctr /r 然后回車,運

      來源:模板無憂//所屬分類:.Net教程/更新時間:2013-04-17
      相關.Net教程