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

=========================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失去焦点时,取消选中项的突出显示.

 

 

示例代码:

 

 

============================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 );//把儿子的儿子再找出来.

                }

         }

 

 

 

那么这个方法就变成了:我们随便拿一个节点,就可以加载它的所有的儿子.每加载一个儿子,就会再次用这个方法,再加载儿子所有的儿子....一直加载下去,直到找不到儿子为止.这就是递归,自己用自己.

 

 

在数据库加载时怎么优化:

可以看到这个方法,每次都会去找它的儿子.那么如果我们每次递归都要根据父节点的某个属性,去数据库寻找它的子节点.就会连接很多次数据库.最好的办法是先把整张关系表都加载进来,然后在表里面找.

 

示例代码:

 

 

同样,遍历树也是一样的道理,要用递归:

 

 

====================================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 ["列名"]

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值