C#成魔之路<1>Windows 应用程序高级控件(1)
发布日期:2021-05-07 18:45:19 浏览次数:28 分类:精选文章

本文共 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 ( i
0) { 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;        }    }}//为树控件节点设置图标可以很好区别节点的类型和选中状态。
上一篇:C#成魔之路<2>Windows 应用程序高级控件(2)
下一篇:C#成魔之路<开篇>

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月14日 08时14分07秒