Winform中在容器控件上显示自定义loading信息(以图片为例)
发布时间:2020-12-15 08:02:34 所属栏目:Java 来源:网络整理
导读:如果不要遮罩父容器控件,直接旁边找个地方创建一个Label控件或者其他控件,然后在逻辑代码中控制其显示和隐藏 如果为了不阻塞主界面而创建了子线程,且要在子线程中控制其显示或隐藏,那么需要用BeginInvoke来包裹界面操作部分 如果要遮罩父容器控件,代码
public partial class CFTreeView : Form { private PictureBox pbLoadingForTree; public CFTreeView() { InitializeComponent(); pbLoadingForTree = new PictureBox(); pbLoadingForTree.Dock = DockStyle.Fill; pbLoadingForTree.ImageLocation = AppDomain.CurrentDomain.BaseDirectory + "Resourceloading.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(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |