C#使用Panel實(shí)現(xiàn)窗體動態(tài)側(cè)邊欄_.Net教程
推薦:減少.NET應(yīng)用程序內(nèi)存占用的一則實(shí)踐最近一周比較忙,主要的工作內(nèi)容是在做一個(gè)叫鍵盤精靈的東西,簡單來講就是將很多數(shù)據(jù)放到內(nèi)存中,對這些數(shù)據(jù)進(jìn)行快速檢索,然后找出根據(jù)輸入條件最匹配的10條記錄并予以展示。具體和下面兩款炒股軟件的相關(guān)功能類似: 數(shù)據(jù)以文本形式存在文件中,且數(shù)據(jù)量較大,有近20
可以實(shí)現(xiàn)側(cè)邊欄的展開、隱藏和鎖定的功能。添加的側(cè)邊欄默認(rèn)是不顯示的通過鼠標(biāo)的懸停事件MouseHover來觸發(fā)展開動作。側(cè)邊欄實(shí)際上是一個(gè)窗體或者是容器,實(shí)現(xiàn)展開的動作必須在一個(gè)時(shí)間段內(nèi)逐步的增加寬度,我采用Panel作為容器的載體,在一個(gè)線程中逐步增加Panel的Width屬性。隱藏,主要使用的是Panel的Visible屬性來實(shí)現(xiàn),隱藏條件的判斷是通過判斷鼠標(biāo)位置是不是在側(cè)邊欄的邊界之外來實(shí)現(xiàn)的。鎖定,是使Panel始終處于顯示的狀態(tài),使隱藏Panel的函數(shù)不執(zhí)行來實(shí)現(xiàn)的。
界面

相關(guān)代碼:
展開:
private void toolStripButton2_MouseHover(object sender, EventArgs e)
{
//鼠標(biāo)懸停事件,展開
if (!this.panel2.Visible) //panel2為側(cè)邊欄的容器
{
Thread ts = new Thread(new ParameterizedThreadStart(TaskShowPanel));
ts.Is true; //設(shè)置為后臺線程
ts.Priority = ThreadPriority.Normal; //設(shè)置優(yōu)先級
ts.Start((Object)245); //Panel展開寬度245
}
}
//定義的線程執(zhí)行函數(shù)
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函數(shù)執(zhí)行錯(cuò)誤");
}
}
隱藏:
private void listView1_MouseMove(object sender, MouseEventArgs e)
{
Point panelPoint = this.PointToClient(Control.MousePosition); //鼠標(biāo)當(dāng)前位置
//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);
}
分享:進(jìn)程性能計(jì)數(shù)器已禁用的解決辦法未處理的異常:進(jìn)程性能計(jì)數(shù)器已禁用 調(diào)試出錯(cuò): 未處理的異常: System.InvalidOperationException: 進(jìn)程性能計(jì)數(shù)器已禁用,因此無法執(zhí)行所請求的操作 問題解決: 方法一: 這時(shí)只要修復(fù)一下windows的性能計(jì)數(shù)器即可。 具體方法:在運(yùn)行中輸入:lodctr /r 然后回車,運(yùn)
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實(shí)現(xiàn)分頁示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 編程使用資源文件實(shí)現(xiàn)多語言頁面(In Action)
- Repeater綁定dictionary數(shù)據(jù)源代碼及報(bào)錯(cuò)解決
- 跟著hsp一步步學(xué)mysql優(yōu)化的方法
- ASP.NET立即上手教程(1)
- 解讀 .NET開發(fā)者常犯的錯(cuò)誤
- 建立個(gè)人知識引擎的重要性
- ASP.NET 2.0中構(gòu)造個(gè)性化網(wǎng)頁
- asp.net里面的身份驗(yàn)證和授權(quán)
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- 揭秘實(shí)現(xiàn)ASP.NET中網(wǎng)站訪問量統(tǒng)計(jì)的方法
- 相關(guān)鏈接:
- 教程說明:
.Net教程-C#使用Panel實(shí)現(xiàn)窗體動態(tài)側(cè)邊欄
。