C#一些常用類的操作整理

來源:互聯網
上載者:User

=========================ConTextMenuStrip右鍵菜單=========================

右鍵菜單的東西無需多說,有一個比較實用的技巧是根據不同的情況來決定快顯功能表的內容.比如在列表中選中了一項,則顯示添加,刪除.沒選中,則只顯示添加.

contextMenuStrip1.Items["按鈕名"].Visible,通過此屬性來設定隱藏或者顯示

 

=========================SaveFileDialog/OpenFileDialog======================

就是開啟一個儲存/開啟對話方塊,這個很常見.比如你另存新檔時,或者下載時.簡單介紹一下相關屬性

 

saveFileDialog1.FileName 擷取或設定選定檔案字串:

擷取:也就是按下了儲存鍵後,將返回選中檔案的絕對路徑. string path=saveFileDialog1.FileName

設定:開啟對話方塊時,儲存的預設檔案名稱.  saveFileDialog1.FileName="請輸入儲存名"

 

saveFileDialog1.Filter 開啟儲存對話方塊後,設定檔案類型和預設尾碼名

saveFileDialog1.Filter="壓縮檔|.rar"

 

saveFileDialog1.InitialDirectory開啟對話方塊時的預設路徑.

saveFileDialog1.InitialDirectory="D://Download"那麼這次開啟對話方塊就會直接開啟D盤的Download檔案夾了

 

 

============================ListBox====================================

ListBox擷取滑鼠指向的行號:必須寫在滑鼠事件裡

int Index = listBox2.IndexFromPoint(e.Location);

 

 

大量刪除:

大量刪除原理:由於刪掉一行後,刪除行下面的每個Item的行號都會減1。所以從上刪到下是非常麻煩的。我們可以從下往上刪。

 

假設刪除行的行號的index,一直刪除直到碰到“停止刪除”這一項為止。

Index= listBox2.IndexFromPoint(e.Location); //即滑鼠選中那行的行號

for (int i = Index-1; i >= 0; i--)
                    {
                        if (i == 0)
                        {
                            listBox2.Items.RemoveAt(i);//如果刪到了最頂行,先刪除第i行,也就是選中行的上一行
                            listBox2.Items.RemoveAt(i);//然後選中行已經變成第0行,再刪一次,刪除選中行
                        }
                        else if (listBox2.Items[i].toString()=="停止刪除")
                        {
                            listBox2.Items.RemoveAt(i+1);//碰到停止刪除,此時滑鼠點擊行已經位於“停止刪除”行的下方,所以刪除上一項時間行+1就行了
                            break;
                        }
                        else
                        {
                            listBox2.Items.RemoveAt(i);//否則就刪除資料
                        }
                    }

 

 

 

============================DataGridView====================================

 

DataGridView選中一行並且置頂:

dataGridView1.Rows[i].Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = i;

 

去掉標題列

RowHeadersVisible設為false

去掉自動增加的空行

AllowUserToAddRows設為false

 

一次選中一行

DataGridView.Rows[DataGridView.SelectedCells[0].RowIndex].Selected = true;

或者在屬性中的SelectionMode中設定為fullRowSelect

 

 

清除所有選中行

dgvSroleinfo.ClearSelection();

刪除選中行 DataGridView.Rows.RemoveAt(行號)     ( 擷取選中行的行號可參考一次選中一行的代碼)右鍵選中:DataGridView.Rows[e.RowIndex].Selected = true;//右鍵選中

 

游標

cursor

 

 

 

============================Listview====================================

Listview控制項可以理解為一個功能複雜的ListBox.每一項都是一個ListViewItem,這個節點擁有一個name屬性,一個text屬性,一個Tag屬性.Tag是Object類型的,可以指向任何一個對象.每個節點都可以包含一個圖片. 不像ListBox的項,一般都是一個簡單的String.

Listview的每在StateImageList屬性裡,綁定一個ImageList

 

給節點綁定圖片:

先把圖片放在一個ImageList裡面,讓Listview控制項的StateImageList屬性綁定這個ImageList

 

定義節點,加入到控制項裡:

既然每一項都是一個節點,那麼加入的時候自然要先初始化節點了:

 

 

                ListViewItem newItem;//定義節點

                newItem = new ListViewItem();//初始化節點

                newItem.Name = "節點名字";

                newItem.Text = "節點在控制項上顯示的內容";//節點文本為角色名稱字

                newItem.Tag = "綁定一個任意類型的變數,也可以是對象"

                newItem.ImageIndex = 0;//綁定圖片

                Listview1.Items.Add(newItem);//載入到控制項裡

 

然後在外面套個迴圈,就可以把所有節點都載入上去了.

額外常用的屬性:

HideSelection失去焦點時,取消選中項的反白.

 

 

範例程式碼:

private void LoadRoleName()<br /> {<br /> ltvRoleno.Clear();//先清空ltvRoleno的所有項<br /> try<br /> {<br /> List<CommonModel.SRoleInfo> MD_SRoleInfos = BLL_sroleinfo.GetModelList("");//這個在別的地方實現的,你不用管,總之擷取到一個MD_SRoleInfos(角色資訊的對象集合).包含N個角色資訊對象.每個角色資訊對象都有roleNo,roleName,remark這3個string型的屬性<br /> ltvRoleno.SmallImageList = imageList1;//綁定圖片集合<br /> ListViewItem newItem;//定義節點<br /> for (int i = 0; i < MD_SRoleInfos.Count; i++)<br /> {<br /> newItem = new ListViewItem();<br /> newItem.Name = MD_SRoleInfos[i].roleNo;//節點名字為角色ID<br /> newItem.Text = MD_SRoleInfos[i].roleName;//節點文本為角色名稱字<br /> newItem.Tag = MD_SRoleInfos[i].remark;//節點標記為角色描述<br /> newItem.ImageIndex = 0;//綁定圖片<br /> ltvRoleno.Items.Add(newItem);//載入到控制項裡<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> ShowMessage(ex.Message);<br /> }<br /> } 

 

============================TreeView====================================

廢話部分:樹形結構是很常用的一個控制項.最難弄的是它的載入和讀取都要用到遞迴.但是遞迴其實很簡單,就是方法自己引用自己.網上有很多介紹用遞迴載入樹控制項的,仔細看都不難.我是瞌睡的時候悟出來的,然後把思路寫在了本子上,第二天回公司實現了這個方法.由此可見它有多簡單.

 

額外的雜項:樹形控制項的每一個節點,也都包含有name,text,tag屬性.也是非常強悍的一個節點.用TreeNode node=new TreeNode()來初始化.

 

實現思路:因為樹形控制項的每一個節點,都可能包含子節點.思路就是:

我們每加入一個節點,都要自動找到它的子節點,然後加入到這個節點下面..

那麼怎麼找到某個的節點的子節點呢?對於子節點來說,它們需要的就是父節點的相關資訊.所以只要把節點本身作為參數傳進去,就不怕找不到它的子節點.

 

也就是說,這個方法應該是這樣:

 

        private void GetTreeView(TreeNode fatherNode)

        {

                //先根據參數fatherNode找到它子節點的相關資訊.怎麼找呢?比如在資料庫,可以載入為樹形的資料每一行自然一定會包含它父行的ID...如果你是把ID存在樹形節點的name屬性中,那麼就可以用fatherNode.name擷取到ID啦.

                for(int i=0;i<結果數量;i++)

                {

 

 

                     TreeNode newnode = new TreeNode();//初始化一個節點

                     newnode.Name="節點名";

                     newnode.Text ="節點顯示內容";

                     newnode.tag="節點綁定的對象";

                     if (fatherNode == null)

                     { 

                         treeView1.Nodes.Add(newnode);//如果父節點為空白,那麼是頂層節點,應該加在控制項上

                     }

                     else

                     {

                         fatherNode.Nodes.Add(newnode);//父節點不為空白,那麼就加在父節點下面.

                     }

                }

         }

 

 

好的,現在我們隨便拿一個節點來,就可以擷取,並載入它所有的子節點了.

現在知道遞迴的朋友應該已經知道,在哪裡添加遞迴了吧!不知道的話,繼續看下去

 

剛才的方法,作用就是我們隨便拿一個節點,就可以載入它的所有的兒子.

但是兒子下面可能還有兒子的.我們隨便拿的一個節點,它可能是某個節點的父親,同時也可能是某個節點的爺爺...所以光找出它所有的兒子是不夠的.

那麼其實很簡單,當我們找到一個兒子後,就用這個方法,把兒子做參數傳進去,再去找兒子的所有兒子.

 

方法就變成了:

 

 

 

        private void GetTreeView(TreeNode fatherNode)

        {

                //先根據參數fatherNode找到它子節點的相關資訊.怎麼找呢?比如在資料庫,可以載入為樹形的資料每一行自然一定會包含它父行的ID...如果你是把ID存在樹形節點的name屬性中,那麼就可以用fatherNode.name擷取到ID啦.

                for(int i=0;i<結果數量;i++)

                {

 

 

                     TreeNode newnode = new TreeNode();//初始化一個節點

                     newnode.Name="節點名";

                     newnode.Text ="節點顯示內容";

                     newnode.tag="節點綁定的對象";

                     if (fatherNode == null)

                     { 

                         treeView1.Nodes.Add(newnode);//如果父節點為空白,那麼是頂層節點,應該加在控制項上

                     }

                     else

                     {

                         fatherNode.Nodes.Add(newnode);//父節點不為空白,那麼就加在父節點下面.

                     }

                     GetTreeView(newnode );//把兒子的兒子再找出來.

                }

         }

 

 

 

那麼這個方法就變成了:我們隨便拿一個節點,就可以載入它的所有的兒子.每載入一個兒子,就會再次用這個方法,再載入兒子所有的兒子....一直載入下去,直到找不到兒子為止.這就是遞迴,自己用自己.

 

 

在資料庫載入時怎麼最佳化:

可以看到這個方法,每次都會去找它的兒子.那麼如果我們每次遞迴都要根據父節點的某個屬性,去資料庫尋找它的子節點.就會串連很多次資料庫.最好的辦法是先把整張關係表都載入進來,然後在表裡面找.

 

範例程式碼:

/// <summary><br /> /// 用遞迴方式產生樹狀結構.已經最佳化.<br /> /// </summary><br /> /// <param name="fatherNode">第一次使用NULL</param><br /> /// <param name="dt">所有查詢結果</param><br /> private void GetTreeView(TreeNode fatherNode,DataTable dt)<br /> {<br /> DataView dtview = new DataView(dt);//這是用來刪選DataTable的好工具<br /> if(fatherNode==null)<br /> {<br /> dtview.RowFilter = "fatherNo=0";//如果父節點為空白,那麼刪選出頂層節點.我的資料庫結構,fatherNo=0的行,都表示頂層節點.<br /> }else<br /> {<br /> dtview.RowFilter = string.Format("fatherNo= {0}",fatherNode.name);//刪選出所有父id為fatherNode.name的節點.因為ID存在Name裡<br /> }<br /> foreach (DataRowView row in dtview)<br /> {<br /> TreeNode newnode = new TreeNode();<br /> newnode.Name=row["No"].ToString();<br /> newnode.Text = row["Name"].ToString();<br /> if (fatherNode == null)<br /> {<br /> treeView1.Nodes.Add(newnode);<br /> }<br /> else<br /> {<br /> fatherNode.Nodes.Add(newnode);<br /> }</p><p> GetTreeView(newnode,dt);<br /> }<br /> } 

 

同樣,遍曆樹也是一樣的道理,要用遞迴:

private void Read(TreeNode fatherNode)<br /> {<br /> if (fatherNode == null)<br /> {<br /> fatherNode.Nodes=treeView1.Nodes;//如果父節點為空白,要遍曆的就是頂層節點.<br /> }<br /> foreach (TreeNode node in fatherNode.Nodes)<br /> {<br /> string No=node.name<br /> string Name=node.text<br /> Read(node);//繼續遞迴<br /> }<br /> } 

 

====================================DataView======================================

DataView允許在已經載入到記憶體裡的Datatable裡執行二次操作.結果返回一個新的Datatable

 

初始化一個DataView:

DataView DV=new DataView(Datatable);

 

使用DataView的刪選方法:

DV.RowFilter="刪選條件的寫法,和SQL語句where段的寫法一樣"

DV就相當於一個刪選後的Datatable.

 

==============================DataRowView==================================

DataRowView一般都來表示Datatable的一行..使遍曆整個Datatable變得很簡單

foreach(DataRowView DRV in Datatable)

{

      DRV ["列名"]

}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.