C# Winform项目,鼠标双击picturebox控件可以充满整个tableLayoutPanel控件,再双击又可以恢复到原来的位置。

sxl_88 2015-05-27 02:13:48
C# Winform项目,在form窗体中,放置了一个tableLayoutPanel控件(2行、2列)并设置它的dock为fill。
然后在每个格子里放一个panel控件并分别设置dock也为fill(共4个panel控件)。
最后在每个panel控件中放一个picturebox控件并分别设置dock也为fill(共4个picturebox控件)。

如何实现用鼠标双击其中任意一个picturebox控件,能够使用picturebox控件充满整个tableLayoutPanel控件。再用鼠标双击该picturebox控件可以使picturebox控件还原到tableLayoutPanel控件原来所在的位置。

请问各位,有没有相关的参考资料或源码。谢谢。
...全文
779 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhhha123 2015-05-27
  • 打赏
  • 举报
回复
也可以设置Parent、size和location控制
  • 打赏
  • 举报
回复
你可以组合我的和4楼的代码啊……
sxl_88 2015-05-27
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
void pb_Click(object sender, EventArgs e)
        {
            var nowPic = sender as PictureBox;
            if (nowPic != null)
            {
                if (nowPic.Dock == DockStyle.Top)
                {
                    //填充状态,设置
                    nowPic.Dock = DockStyle.None;
                    ShowAllInnerControls(true, nowPic);
                }
                else
                {
                    nowPic.Dock = DockStyle.Top;
                    ShowAllInnerControls(false, nowPic);
                }
            }
        }
        private void ShowAllInnerControls(bool visible, Control exceptControl)
        {
            var controls = this.flowLayoutPanel1.Controls;
            for (var i = 0; i < controls.Count; i++)
            {
                if (controls[i].Equals(exceptControl))
                {
                    continue;
                }
                controls[i].Visible = visible;
            }
        }
试验了下,dock设置为fill貌似会出问题,图片显示不出来了,所以这里将dock设置为了top……但这个思路应该可行
这个有点小问题,就是无法充满整个tableLayoutPanel控件,可以解决吗?
道玄希言 2015-05-27
  • 打赏
  • 举报
回复
在你的窗体里面, 添加一个 PanelA, PanelA.Dock = DockStyle.Fill; 然后將 tableLayoutPanel 放到 PanelA 里面, tableLayoutPanel.Dock = DockStyle.Fill; 其他不变. 在picturebox 双击代码:


private void pictureBox1_DoubleClick(object sender, EventArgs e)
        {
            if (tableLayoutPanel1.Visible)
            {
                tableLayoutPanel1.Visible = false;
                pictureBox1.Parent = PanelA;
            }
            else
            {
                tableLayoutPanel1.Visible = true;
                pictureBox1.Parent = panel1;                
            }
        }

  • 打赏
  • 举报
回复
void pb_Click(object sender, EventArgs e)
        {
            var nowPic = sender as PictureBox;
            if (nowPic != null)
            {
                if (nowPic.Dock == DockStyle.Top)
                {
                    //填充状态,设置
                    nowPic.Dock = DockStyle.None;
                    ShowAllInnerControls(true, nowPic);
                }
                else
                {
                    nowPic.Dock = DockStyle.Top;
                    ShowAllInnerControls(false, nowPic);
                }
            }
        }
        private void ShowAllInnerControls(bool visible, Control exceptControl)
        {
            var controls = this.flowLayoutPanel1.Controls;
            for (var i = 0; i < controls.Count; i++)
            {
                if (controls[i].Equals(exceptControl))
                {
                    continue;
                }
                controls[i].Visible = visible;
            }
        }
试验了下,dock设置为fill貌似会出问题,图片显示不出来了,所以这里将dock设置为了top……但这个思路应该可行
於黾 2015-05-27
  • 打赏
  • 举报
回复
既然都为fill 那么你隐藏了另外3个,它就自动充满了 你把另外3个显示出来,它就自动还原了啊
  • 打赏
  • 举报
回复
你这个就是双击时,将当前PictureBox设置dock为fill 然后这个tableLayoutPanel之内的其它control全部隐藏,再点击的时候判断当前PictureBox的dock是不是fill状态,是的话,就设置为none,然后将tableLayoutPanel的所有control显示

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧