【问题标题】:how do make the image of TreeNode display smaller?如何使 TreeNode 的图像显示更小?
【发布时间】:2014-03-17 18:07:00
【问题描述】:

在我的 Windows 窗体中,我有以下 Treeview 控件,它带有四个节点来代表大学课程的学年。

如您所见,我已将小图像添加到节点(以对它们进行颜色编码)图像大小为 8 X 8 像素 png 图像。我使用ImageList 集合将它们内联存储。

我有两个问题

  1. 节点之间没有间隙,因此图像(颜色代码)看起来不专业

第二个问题参考下图看看我点击一个节点时发生了什么

2.如你所见,绿色的突然变成了橙色

有没有办法解决这些问题?

treeview控件的当前配置中,我已将showlines设置为false,将hideselection设置为false,其余属性均为默认设置。

这里是代码

在表单的 load() 中我有这个 myImageList 集合变量是全局声明的

    private void FrmNewProgram_Load(object sender, EventArgs e)
    {

        myImageList = new ImageList();
        myImageList.Images.Add(new Bitmap(SMSV100.Properties.Resources.year1tagx16));
        myImageList.Images.Add(new Bitmap(SMSV100.Properties.Resources.year12tagx16));
        myImageList.Images.Add(new Bitmap(SMSV100.Properties.Resources.year3x16));
        myImageList.Images.Add(new Bitmap(SMSV100.Properties.Resources.year4x16));
        tvcAcdYears.ImageList = myImageList;
   }

有一个我没有提到的组合框,但在这里它的作用是,它有 1、2、3、4 个值分别表示第 1、2、3、4 年,所以在我添加的组合框的 SelectedIndexChanged() 事件中此代码,因此它将以下列方式添加节点。如果用户选择 1,则仅将 Year #1 添加到 TreeView 如果用户选择 2,则将 Year #1 和 Year #2 添加到 TreeView,依此类推

 private void cmbProgDuration_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cmbProgDuration.SelectedIndex > -1)
        {
            if (cmbProgDuration.SelectedIndex == 0)
            {
                tvcAcdYears.Nodes.Clear();
                TreeNode tnOneYear = new TreeNode("Year #1");


                tnOneYear.ImageIndex = 0;
                tvcAcdYears.Nodes.Add(tnOneYear);


            }
            else if (cmbProgDuration.SelectedIndex == 1)
            {
                tvcAcdYears.Nodes.Clear();
                TreeNode tnOneYear = new TreeNode("Year #1");
                tnOneYear.ImageIndex = 0;


                TreeNode tn2ndYear = new TreeNode("Year #2");
                tn2ndYear.ImageIndex = 1;


                tvcAcdYears.Nodes.Add(tnOneYear);
                tvcAcdYears.Nodes.Add(tn2ndYear);
            }
            else if (cmbProgDuration.SelectedIndex == 2)
            {
                tvcAcdYears.Nodes.Clear();
                TreeNode tnOneYear = new TreeNode("Year #1");
                tnOneYear.ImageIndex = 0;


                TreeNode tn2ndYear = new TreeNode("Year #2");
                tn2ndYear.ImageIndex = 1;


                TreeNode tn3rdYear = new TreeNode("Year #3");
                tn3rdYear.ImageIndex = 2;


                tvcAcdYears.Nodes.Add(tnOneYear);
                tvcAcdYears.Nodes.Add(tn2ndYear);
                tvcAcdYears.Nodes.Add(tn3rdYear);
            }
            else if (cmbProgDuration.SelectedIndex == 3)
            {
                tvcAcdYears.Nodes.Clear();
                TreeNode tnOneYear = new TreeNode("Year #1");
                tnOneYear.ImageIndex = 0;                    


                TreeNode tn2ndYear = new TreeNode("Year #2");
                tn2ndYear.ImageIndex = 1;


                TreeNode tn3rdYear = new TreeNode("Year #3");
                tn3rdYear.ImageIndex = 2;


                TreeNode tn4thYear = new TreeNode("Year #4");
                tn4thYear.ImageIndex = 3;


                tvcAcdYears.Nodes.Add(tnOneYear);
                tvcAcdYears.Nodes.Add(tn2ndYear);
                tvcAcdYears.Nodes.Add(tn3rdYear);
                tvcAcdYears.Nodes.Add(tn4thYear);
            }

            tvcAcdYears.SelectedNode = tvcAcdYears.Nodes[0];

        }
    }

谢谢

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:
    1. 将图像更改为 16x16 的大小,并将每个 8x8 的原始图像放在中心,保持边缘透明。
    2. 确保每个树视图节点的SelectedImageIndex 属性(以及StateImageIndex,如果设置了StateImage 属性)设置为与ImageIndex 属性相同的值。

    【讨论】:

      猜你喜欢
      • 2014-07-02
      • 1970-01-01
      • 2021-07-18
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2020-10-13
      相关资源
      最近更新 更多