
本文共 14235 字,大约阅读时间需要 47 分钟。
“成神之路”当中曾经提到一些相关的高级控件,但是缺乏范例,这里捡取一些典型实例进行详细的剖析和实验。对C#控件进行进一步的深入学习。
1、ImageList控件(存储图像控件)
用于存储图像资源,然后在控件上显示出来,简化对图像的管理。主要属性是Image。包含关联控件将要使用的图片。每个单独的图片可以通过索引值或者键值来进行访问。所有的图像都用相同的大小进行显示。大小由ImageSize属性设置,较大的图像将缩小至适当的尺寸。
(1)添加图像
在ImageList控件中的add方法,可以以编程的方式向ImageList中天假图像。public void Add(Image value)//value表示要添加的图像
示例程序:加载图像将其添加至图像列表中并且在图像盒子中显示出来。
完整代码namespace ImageListTest1{ public partial class Form1 : Form { int i = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1=new OpenFileDialog(); //新建一个对话框 if (openFileDialog1.ShowDialog() == DialogResult.OK) //如果打开一个对话框并且选择OK { string path = openFileDialog1.FileName;//获取目标图像的路径 Image image = Image.FromFile(path,true);//创建一个image对象 imageList1.Images.Add(image);//向list当中添加图像 pictureBox1.Image = imageList1.Images[i];//从list当中调用图像。 i++; } } }}
注意:若要使得图像列表和一个控件相关联,应该将该控件的ImageList属相设置为ImageList组件的名称。
(2)删除图像
在ImageList控件中可以使用RemoveAt方法进行一处单个图像和Clear方法清除图像列表当中的所有图像。 语法:public void RemoveAt(int index)//index表示要移除的图像的索引//其索引必须有效,否则运行会发生异常。public void Clear()
示例程序:创建一个应用程序,设置在控件上显示的图像,使用Images的相关上述属性将图像移除。
namespace ImageListTest1{ public partial class Form1 : Form { private int i = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1=new OpenFileDialog(); //新建一个对话框 if (openFileDialog1.ShowDialog() == DialogResult.OK) //如果打开一个对话框并且选择OK { string path = openFileDialog1.FileName;//获取目标图像的路径 Image image = Image.FromFile(path,true);//创建一个image对象 imageList1.Images.Add(image);//向list当中添加图像 pictureBox1.Image = imageList1.Images[i];//从list当中调用图像。 i++; } } private void button2_Click(object sender, EventArgs e) { if (imageList1.Images.Count > 0)//还有图像 { if (imageList1.Images.Count > 1) { if ( i>=imageList1.Images.Count)//索引数大于图像数量 { i = 0; } imageList1.Images.RemoveAt(i); pictureBox1.Image = imageList1.Images[i]; MessageBox.Show("Delete thel last picture!!"); } else { imageList1.Images.RemoveAt(i); pictureBox1.Image = null; MessageBox.Show("Delete all!!"); } } else { MessageBox.Show("There is no picture!!"); } } private void button4_Click(object sender, EventArgs e) { if ( i0) { i = i - 1; if (imageList1.Images[i] != null) { pictureBox1.Image = imageList1.Images[i]; } else { i = i + 1; MessageBox.Show("This is the first picture","Error"); } } else { MessageBox.Show("Error", "This is the first picture!!"); } } }}
2、ListView控件
列表视图控件显示带图标的项的列表,可以显示大图标,小图标和数据。使用ListView控件可以创建类似Windows资源管理器有窗口的用户界面。
该控件可以通过View属性设置项在控件中的显示方式,View属性的值和说明如下:Details:每个项显示在不同的行上,并且带有关于列中所排列的各项的进一步信息。最左边的列包含一个小图标和标签,后面的列包含应用程序指定的子项。列显示一个标头,它可以显示列的标题。用户可以在运行的时候调整各列的大小。LargeIcon:每个项第一显示为一个最大的图标,在他的下面有一个标签。默认的视图模式。List:每个项都显示为一个小图标,在他的右侧带一个标签,各项排列在列中,没有列标头。SmallIcon:每个项都显示为一个小图标,在他右侧带一个标签。Title:每个项都显示为一个完整大小的图标,在他的右侧带项标签和子项信息。显示的子项信息都由应用程序指定。注意:ListView有一个FullrowSelect属性,此属性只有在View属性在Detail的时候有效。
(1)添加和移除项
可以使用Items属性当中的Add方法来进行添加。public virtual ListView Add(string text,int imageIndex)//text:项的文本。ImageIndex:图像的索引。返回值表示已经添加到集合中的ListItem。
示例程序:向listview控件添加相关项。
namespace ListViewTest1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("the textbox cant be null", "error!!"); } else { listView1.Items.Add(textBox1.Text.Trim()); } } }}
通过使用items属性的RemoveAt或者Clear方法可以移除控件中的项。RemoveAt方法用于移除指定项。Clear移除所有项。
语法:public virtual void RemoveAt(int index)//index表示从0开始的索引。public virtual void Clear()
示例程序:进行添加 移除和清空的listView程序。
namespace ListViewTest1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("the textbox cant be null", "error!!"); } else { listView1.Items.Add(textBox1.Text.Trim()); //从当前 String 对象移除所有前导空白字符和尾部空白字符 } } private void button2_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count == 0) { MessageBox.Show("please select the one to select!"); } else { listView1.Items.RemoveAt(listView1.SelectedItems[0].Index); listView1.SelectedItems.Clear(); } } private void button3_Click(object sender, EventArgs e) { if (listView1.Items.Count == 0) { MessageBox.Show("there is no item"); } else { listView1.Items.Clear(); } } }}
(2)选择listView当中的项
通过控件的selected属性设置控件中的选择项。上述示例程序已经列出相关的选项。该属性用于获取或者设置一个值,该值指示是否选定此项。语法:
public bool Selected{ get;set;}//属性值表示如果选定此项则为true,否则为false。
示例程序:通过程序来控制相关项的选择。
namespace ListViewTest2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { listView1.Items.Add("game"); listView1.Items.Add("file"); listView1.Items.Add("study"); listView1.Items[2].Selected = true; } }}
(3)为项添加图标
需要和imagelist控件相结合,一同使用。使用imagelist控件设置listview当中的项的图标,listview控件可以显示三个图像列表中的图标。 list视图,Details视图,和SmallIcon视图显示SmallImageList属性中指定的图像列表中的图像。LargeIcon视图显示LargeImageList属性当中指定的图像列表中的图像。列表视图可以在大图标,小图标旁边显示StateImageList属性当中设置的一组附加图标。 实现步骤: I.将相应的属性(SmallImageList、LargeImageList或者StateImageList)设置为想要使用的现有的ImageList组件当中。 II.为每个具有关联图标的列表设置ImageIndex或者StateImageIndex属性。这些属性可以在代码或者ListViewItem编辑器当中进行设置。示例程序:设置相关图标控件的属性。
namespace ListViewTest2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { listView1.LargeImageList = imageList1; //设置控件中的largeImageList属性 imageList1.ImageSize = new Size(37,26); //设置相关图标的大小 imageList1.Images.Add(Image.FromFile(@"F:\学习文件\素材图片\壁纸\49b75d1913c85a50.jpg",true)); imageList1.Images.Add(Image.FromFile(@"F:\学习文件\素材图片\壁纸\-767fbfa9fbb4fc78.jpg", true)); listView1.SmallImageList = imageList1; //设置相关的SmallImageList属性 listView1.Items.Add("游戏"); listView1.Items.Add("学习"); //注意以下控件图标绑定 listView1.Items[0].ImageIndex = 0; listView1.Items[1].ImageIndex = 1; } }}
注意:listView控件默认以大图标的方式显示列表项。
(4)启用平铺视图
启用平铺视图功能,可以在图形信息和文本信息之间提供一种视觉平衡。
平铺视图和分组功能或插入标记功能一起结合使用,如果要启用平铺视图,需要将View属性设置为Title,可以通过设置TitleSize属性来调整平铺的大小。示例程序:关于title的具体用法:
namespace ListViewTest3{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { listView1.View = View.Tile; //设置该空间的属性为Title listView1.LargeImageList = imageList1; //设置listview的相关图像列表 imageList1.Images.Add(Image.FromFile(@"F:\学习文件\素材图片\壁纸\49b75d1913c85a50.jpg",true)); imageList1.Images.Add(Image.FromFile(@"F:\学习文件\素材图片\壁纸\-767fbfa9fbb4fc78.jpg", true)); listView1.Items.Add("game"); listView1.Items.Add("study"); listView1.Items.Add("game"); listView1.Items.Add("study"); listView1.Items.Add("game"); listView1.Items.Add("study"); listView1.Items[0].ImageIndex = 0; listView1.Items[1].ImageIndex = 1; listView1.Items[2].ImageIndex = 0; listView1.Items[3].ImageIndex = 1; listView1.Items[4].ImageIndex = 0; listView1.Items[5].ImageIndex = 1; listView1.TileSize = new Size(100,50); //设置相关的size } }}
3、TreeView控件
树控件可以为用户显示节点层次结构,每个节点可以包含子节点,包含子节点的节点叫做父节点。(1)添加和删除节点
使用treeView控件当中的Nodes属性的Add方法,可以向控件当中添加节点。 语法:public virtual int Add(TreeNode node);//node表示要添加到集合中的treenode。返回值表示添加到树节点集合中的treenode的从0开始的索引值。
示例程序:关于相关的节点添加细节和方法:
namespace TreeViewTest1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //建立相关的父节点 TreeNode tn1 = treeView1.Nodes.Add("plant"); TreeNode tn2 = treeView1.Nodes.Add("animal"); TreeNode tn3 = treeView1.Nodes.Add("dirt"); //建立三个子节点 TreeNode Ntn1 = new TreeNode("罗兰"); TreeNode Ntn2= new TreeNode("红枫"); TreeNode Ntn3 = new TreeNode("罂粟"); //添加子节点 tn1.Nodes.Add(Ntn1); tn1.Nodes.Add(Ntn2); tn1.Nodes.Add(Ntn3); } }}//注意每个子节点只能有一个父节点
移除节点
Remove方法可以从树节点集合中移除指定的树节点,语法:public void Remove(TreeNode node)
示例程序:对节点进行删除。删除选中的子节点。
注意:删除节点的时候要确定节点已经被选中。namespace TreeViewTest1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //建立相关的父节点 TreeNode tn1 = treeView1.Nodes.Add("plant"); //建立三个子节点 TreeNode Ntn1 = new TreeNode("罗兰"); TreeNode Ntn2= new TreeNode("红枫"); TreeNode Ntn3 = new TreeNode("罂粟"); //添加子节点 tn1.Nodes.Add(Ntn1); tn1.Nodes.Add(Ntn2); tn1.Nodes.Add(Ntn3); } private void button1_Click(object sender, EventArgs e) { if (treeView1.SelectedNode.Text == "plant") { MessageBox.Show("please select the one point to delete"); } else { treeView1.Nodes.Remove(treeView1.SelectedNode); } } }}
(2)获取树控件中选中的节点
可以在控件的AfterSelect事件中使用EventArgs对象返回对已单击节点对象的引用。通过检查TreeViewEventArgs类(包含和事件有关的数据),确定单机了哪个节点。 示例程序:对上一个程序进行了些许更改。namespace TreeViewTest1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //建立相关的父节点 TreeNode tn1 = treeView1.Nodes.Add("plant"); //建立三个子节点 TreeNode Ntn1 = new TreeNode("罗兰"); TreeNode Ntn2= new TreeNode("红枫"); TreeNode Ntn3 = new TreeNode("罂粟"); //添加子节点 tn1.Nodes.Add(Ntn1); tn1.Nodes.Add(Ntn2); tn1.Nodes.Add(Ntn3); } private void button1_Click(object sender, EventArgs e) { if (treeView1.SelectedNode.Text == "plant") { MessageBox.Show("please select the one point to delete"); } else { treeView1.Nodes.Remove(treeView1.SelectedNode); } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { //在AfterSelect事件中获取控件中选中节点显示的文本。 label1.Text = "当前选中节点:" + e.Node.Text; } }}
(3)为树控件中的节点设置图标
设置TreeView控件的ImageList属性为想要使用的现有ImageList控件。这些属性可在设计器中使用属性窗口中设置也可以在代码中设置。treeView1.ImageList=imageList1;
设置节点的ImageIndex和SelectedImageIndex属性。ImageIndex属性确定正常和展开状态下的节点显示图像,SelectedImageIndex属性确定选定状态下的节点显示的图像。
treeView1.ImageIndex=0;treeView1.SelectedImageIndex=1;
示例程序:添加相关图标进入树控件当中。继续对上一个示例程序进行相关的功能添加:
namespace TreeViewTest1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //建立相关的父节点 TreeNode tn1 = treeView1.Nodes.Add("plant"); //建立三个子节点 TreeNode Ntn1 = new TreeNode("罗兰"); TreeNode Ntn2= new TreeNode("红枫"); TreeNode Ntn3 = new TreeNode("罂粟"); //添加子节点 tn1.Nodes.Add(Ntn1); tn1.Nodes.Add(Ntn2); tn1.Nodes.Add(Ntn3); //设置图片列表中的图标 imageList1.Images.Add(Image.FromFile(@"F:\学习文件\素材图片\壁纸\49b75d1913c85a50.jpg",true)); imageList1.Images.Add(Image.FromFile(@"F:\学习文件\素材图片\壁纸\-767fbfa9fbb4fc78.jpg", true)); //设置当前属性 treeView1.ImageList = imageList1; imageList1.ImageSize = new Size(16,16); //设置控件中的图标。 treeView1.ImageIndex=0; treeView1.SelectedImageIndex = 1; } private void button1_Click(object sender, EventArgs e) { if (treeView1.SelectedNode.Text == "plant") { MessageBox.Show("please select the one point to delete"); } else { treeView1.Nodes.Remove(treeView1.SelectedNode); } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { label1.Text = "当前选中节点:" + e.Node.Text; } }}//为树控件节点设置图标可以很好区别节点的类型和选中状态。
发表评论
最新留言
关于作者
