C#成魔之路<1>Windows 应用程序高级控件(1)

“成神之路”当中曾经提到一些相关的高级控件,但是缺乏范例,这里捡取一些典型实例进行详细的剖析和实验。对C#控件进行进一步的深入学习。

1、ImageList控件(存储图像控件)

用于存储图像资源,然后在控件上显示出来,简化对图像的管理。主要属性是Image。包含关联控件将要使用的图片。每个单独的图片可以通过索引值或者键值来进行访问。所有的图像都用相同的大小进行显示。大小由ImageSize属性设置,较大的图像将缩小至适当的尺寸。

(1)添加图像
在ImageList控件中的add方法,可以以编程的方式向ImageList中天假图像。

public void Add(Image value)
//value表示要添加的图像

关于openFileDialog相关知识

示例程序:加载图像将其添加至图像列表中并且在图像盒子中显示出来。
完整代码

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<imageList1.Images.Count)
            {
                i = i + 1;
                if (imageList1.Images[i] != null)
                { pictureBox1.Image = imageList1.Images[i]; }
                else
                {
                    i = i - 1;
                    MessageBox.Show("this is the last picture!","Error");
                }
            }
            else
            {
                MessageBox.Show("Error","This is the last picture!!");
            }
        }

        private void button3_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;
        }
    }
}
//为树控件节点设置图标可以很好区别节点的类型和选中状态。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值