Winform中在容器控件上显示自定义loading信息(以图片为例)

时间:2019-08-16 16:23:09   收藏:0   阅读:91
    public partial class CFTreeView : Form
    {
        private PictureBox pbLoadingForTree;

        public CFTreeView()
        {
            InitializeComponent();

            pbLoadingForTree = new PictureBox();
            pbLoadingForTree.Dock = DockStyle.Fill;
            pbLoadingForTree.ImageLocation = AppDomain.CurrentDomain.BaseDirectory + "Resource\\loading.gif";
            pbLoadingForTree.SizeMode = PictureBoxSizeMode.CenterImage;
            pbLoadingForTree.BackColor = Color.FromArgb(125, Color.White);
            pbLoadingForTree.Visible = false;
            treeView1.Controls.Add(pbLoadingForTree);

            loadOrgs();
        }

        private void cbOrg_SelectedValueChanged(object sender, EventArgs e)
        {
            string selectedOrg = (string)((ComboBox)sender).SelectedItem;

            Thread t = new Thread(() =>
            {
                if (!String.IsNullOrEmpty(selectedOrg))
                {
                    this.BeginInvoke(new Action(delegate ()
                    {
                        pbLoadingForTree.Visible = true;
                        cbOrg.Enabled = false;
                    }));

                    Org currentOrg = cf.Orgs.Where(a => a.Name.Equals(selectedOrg)).First();

                    // only load data once for each org
                    if (currentOrg.Spaces.Count() == 0)
                    {
                        loadEntireTreeForOneOrg(currentOrg);
                    }

                    this.BeginInvoke(new Action(delegate ()
                    {
                        // draw tree
                        treeView1.Nodes.Clear();
                        foreach (Space space in currentOrg.Spaces)
                        {
                            TreeNode spaceNode = new TreeNode();
                            spaceNode.Name = space.Name;
                            spaceNode.Text = space.Name;
                            // clear checked
                            spaceNode.Checked = false;
                            foreach (App app in space.Apps)
                            {
                                TreeNode appNode = new TreeNode();
                                appNode.Name = app.Name;
                                appNode.Text = app.Name;
                                // clear checked
                                appNode.Checked = false;
                                spaceNode.Nodes.Add(appNode);
                            }
                            treeView1.Nodes.Add(spaceNode);
                        }

                        pbLoadingForTree.Visible = false;
                        cbOrg.Enabled = true;
                        rtbLog.Clear();
                        rtbEnv.Clear();
                        rtbService.Clear();
                    }));
                }
            });
            t.Start();
        }
    }

原文:https://www.cnblogs.com/wyp1988/p/11364465.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!