熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#使用Panel實現窗體動態側邊欄

2013-11-13 10:41:10  來源: .NET編程 

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

  wps_clip_image-11395

  相關代碼
展開
private void toolStripButton_MouseHover(object sender EventArgs e)
{
//鼠標懸停事件展開
if (!thispanelVisible) //panel為側邊欄的容器
{
Thread ts = new Thread(new ParameterizedThreadStart(TaskShowPanel));
tsIs true; //設置為後台線程
tsPriority = ThreadPriorityNormal; //設置優先級
tsStart((Object)); //Panel展開寬度
}
}
//定義的線程執行函數
private void TaskShowPanel(Object ParObject)
{
int w = (int)ParObject;
for (int i = ; i <= w; i++)
{
ShowPanel(thispanel i);
}
}
private delegate void SetTextCallback(Panel p int w);
/// <summary>
/// 展開動作
/// </summary>
/// <param name="p">panel容器</param>
/// <param name="w">寬度</param>
private void ShowPanel(Panel pint w)
{
//跨線程訪問
try
{
if (pInvokeRequired)
{
SetTextCallback d = new SetTextCallback(ShowPanel);
pInvoke(d new Object[] { p w });
}
else
{
pWidth = w;
if (!pVisible)
{
pVisible = true;
}
}
}
catch (Exception ex)
{
MessageBoxShow(exMessage "ShowPanel函數執行錯誤");
}
}
隱藏
private void listView_MouseMove(object sender MouseEventArgs e)
{
Point panelPoint = thisPointToClient(ControlMousePosition); //鼠標當前位置
//thispanelLocationX panel的起始位置
//thispanelWidth panel的寬度
if (thispanelVisible && (panelPointX > (thispanelLocationX + thispanelWidth)))
{
thispanelVisible = false;
}
}
鎖定
private void button_Click(object sender EventArgs e)
{
//刪除隱藏事件
thislistViewMouseMove = new SystemWindowsFormsMouseEventHandler(thislistView_MouseMove);
}


From:http://tw.wingwit.com/Article/program/net/201311/14295.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.