【问题标题】:How to set the background image of a TreeView Control? (VS 2008/.Net 3.5/C#/WinForms)如何设置 TreeView 控件的背景图像? (VS 2008/.Net 3.5/C#/WinForms)
【发布时间】:2011-03-23 14:45:45
【问题描述】:

我一直在做一些研究,这似乎是不可能的,除非我开始深入研究 InterOperabilty,即 PInvoke 和什么不是真正不是我的水壶鱼。我重新发布这个问题是因为我想知道是否有人已经设法做到这一点?

我对所有图片都使用 .png,并请专业人士提供我的图片,这样我就知道这些图片的格式是最好的、最合适的。

似乎标准的树视图控件不直接支持背景图像,它也不允许将其背景颜色设置为透明?有人对这两个有什么想法吗?

【问题讨论】:

    标签: c# winforms .net-3.5 treeview


    【解决方案1】:

    这可以通过重写 WndProc() 并捕获 WM_ERASEBKGND 消息来实现。下面显示的控件执行此操作。但是,您很快就会发现 Windows 窗体 TreeView 类不这样做的原因。打开“平滑滚动”系统选项后,您会得到非常难看的伪像。更不用说缺乏节点文本透明度。不,没有解决方法,只有 完全 替换不依赖本机 Windows 控件的控件才能解决此问题。不是您通常应该考虑的东西,除非它来自一个非常信誉良好的组件供应商。

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    class MyTreeView : TreeView {
        private Image mImage;
        public Image Image {
            get { return mImage; }
            set { mImage = value; Invalidate(); }
        }
        protected override void OnAfterCollapse(TreeViewEventArgs e) {
            if (mImage != null) Invalidate();
            base.OnAfterCollapse(e);
        }
        protected override void OnAfterExpand(TreeViewEventArgs e) {
            if (mImage != null) Invalidate();
            base.OnAfterExpand(e);
        }
        protected override void WndProc(ref Message m) {
            base.WndProc(ref m);
            if (m.Msg == 0x14 && mImage != null) {
                using (var gr = Graphics.FromHdc(m.WParam)) {
                    gr.DrawImage(mImage, Point.Empty);
                }
            }
        }
    }
    

    【讨论】:

    • @curiosity System.Drawing.Image treeBackImage = global::Tow.Properties.Resources.img1; my_tree_view.Image = treeBackImage ;
    【解决方案2】:

    如果您愿意使用第三方库,请查看http://objectlistview.sourceforge.net/cs/index.html - 但请注意它是 GPL。在那里设置背景图像很容易。

    【讨论】:

    • 这可能对我来说很懒惰,但它与 TreeView 控件有多大不同??你能不能快点把它换掉,只是为了试用,看看它的外观和感觉等等?
    • 这看起来像是一个很棒的小控件,但我已经花费了无数小时和时间围绕 TreeView 控件构建我的应用程序。那个建立控制的家伙看起来可以在上面发布一个小出版物:|这太好了,但我不能因为一个控件而改变我的应用程序的核心功能。该死的背景图!!!还花了很长时间在 Photoshop 中构建它????
    • @IbrarMumtaz - 是的,真可惜。恐怕我不知道如何设置 TreeView 控件的背景。
    • 选择这个作为解决方案,因为答案是更换控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-19
    • 2011-01-11
    • 2011-12-15
    相关资源
    最近更新 更多