模仿ICE的structured panorama小按钮

简介: 这个按钮的目的是用于手动排列图片序列,应该说写得比较精巧,我使用csharp进行模仿,主要采用的是自动控件创建技术。结果比较简陋,实现功能而已,放出来大家一起学习。using System;using System.

这个按钮的目的是用于手动排列图片序列,应该说写得比较精巧,我使用csharp进行模仿,主要采用的是自动控件创建技术。结果比较简陋,实现功能而已,放出来大家一起学习。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 动态创建
{
     public partial  class Form1  : Form
    {
         int iclick1  =  - 1;
         int iclick2  =  - 1;
        Button[] btns  =  new Button[ 16];
         public Form1()
        {
            InitializeComponent();
        }
         private  void Form1_Load(object sender, EventArgs e)
        {
             //自动创建
           
              for ( int i  =  0; i  <  16; i ++)
             {
                 btns[i]  =  new Button();
                 btns[i].Name  = i.ToString(); //加个名字方便集中操作
                 btns[i].Size  =  new Size( 4848);
                  int ix  =  20 + 60 *(i % 4);
                  int iy  =  20 + 60 *(i / 4);
                 btns[i].Location  =  new Point(ix, iy);
                  this.Controls.Add(btns[i]);
                  //绑定事件
                 btns[i].Click  +=  new System.EventHandler( this.btns_Click); 
                 btns[i].MouseHover += new System.EventHandler( this.btns_MouseHover);
                 btns[i].MouseLeave += new System.EventHandler( this.btns_MouseLeave);
             }
        }
         //集中事件处理
         private  void btns_Click(object sender, EventArgs e)
        {
            Button btn  = (Button)sender;
             int index  =  int.Parse(btn.Name);
             if (index  ==  0  || index  ==  3  || index  ==  12  || index  ==  15)
            {
                 //将上一个选择的按钮状态变为空
                 if (iclick1  !=  - 1)
                    btns[iclick1].Text  =  "";
                 if (iclick2  !=  - 1)
                    btns[iclick2].Text  =  "";
                iclick1  = index;
                btn.BackColor  = Color.Empty;
                btn.ForeColor  = Color.Black;
                btn.Text  =  "1";
            }
             if (index  ==  1  || index  ==  4)
            {
                 if (iclick1  !=  0)
                     return;
                 //将上一个选择的按钮状态变为空
                 if(iclick2  !=  - 1)
                    btns[iclick2].Text  =  "";
                iclick2  = index;
                btn.BackColor  = Color.Empty;
                btn.ForeColor  = Color.Black;
                btn.Text  =  "2";
            }
             if (index  ==  2  || index  ==  7)
            {
                 if (iclick1  !=  3)
                     return;
                 //将上一个选择的按钮状态变为空
                 if (iclick2  !=  - 1)
                    btns[iclick2].Text  =  "";
                iclick2  = index;
                btn.BackColor  = Color.Empty;
                btn.ForeColor  = Color.Black;
                btn.Text  =  "2";
            }
               if (index  ==  8  || index  ==  13)
            {
                 if (iclick1  !=  12)
                     return;
                 //将上一个选择的按钮状态变为空
                 if (iclick2  !=  - 1)
                    btns[iclick2].Text  =  "";
                iclick2  = index;
                btn.BackColor  = Color.Empty;
                btn.ForeColor  = Color.Black;
                btn.Text  =  "2";
            }
              if (index  ==  11  || index  ==  14)
            {
                 if (iclick1  !=  15)
                     return;
                 //将上一个选择的按钮状态变为空
                 if (iclick2  !=  - 1)
                    btns[iclick2].Text  =  "";
                iclick2  = index;
                btn.BackColor  = Color.Empty;
                btn.ForeColor  = Color.Black;
                btn.Text  =  "2";
            }
            
        }
         private  void btns_MouseHover(object sender, EventArgs e)
        {
            Button btn  = (Button)sender;
             int index  =  int.Parse(btn.Name);
             if (index  == iclick1)
                 return;
             //4 个角可能按出1
             if (index  ==  0  || index  ==  3  || index  ==  12  || index  ==  15)
            {
                btn.BackColor  = Color.Gray;
                btn.ForeColor  = Color.White;
                btn.Text  =  "1";
            }
             //4个角旁边可能按出2
             if (index  ==  1  || index  ==  4)
            {
                 if (iclick1  !=  0)
                     return;
                btn.BackColor  = Color.Gray;
                btn.ForeColor  = Color.White;
                btn.Text  =  "2";
            }
             if (index  ==  2  || index  ==  7)
            {
                 if (iclick1  !=  3)
                     return;
                btn.BackColor  = Color.Gray;
                btn.ForeColor  = Color.White;
                btn.Text  =  "2";
            }
             if (index  ==  8  || index  ==  13)
            {
                 if (iclick1  !=  12)
                     return;
                btn.BackColor  = Color.Gray;
                btn.ForeColor  = Color.White;
                btn.Text  =  "2";
            }
             if (index  ==  11  || index  ==  14)
            {
                 if (iclick1  !=  15)
                     return;
                btn.BackColor  = Color.Gray;
                btn.ForeColor  = Color.White;
                btn.Text  =  "2";
            }
        }
         private  void btns_MouseLeave(object sender, EventArgs e)
        {
            Button btn  = (Button)sender;
             int index  =  int.Parse(btn.Name);
             if (index  == iclick1  || index  == iclick2)
                 return;
            btn.BackColor  = Color.Empty;
            btn.ForeColor  = Color.Black;
            btn.Text  =  "";
        }
    }
}





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
6月前
|
存储 测试技术 UED
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
160 1
XR Interaction Toolkit教程⭐二、实现移动、传送和人物的碰撞功能
XR Interaction Toolkit教程⭐二、实现移动、传送和人物的碰撞功能
|
1月前
|
人工智能 自然语言处理 PyTorch
Text2Video Huggingface Pipeline 文生视频接口和文生视频论文API
文生视频是AI领域热点,很多文生视频的大模型都是基于 Huggingface的 diffusers的text to video的pipeline来开发。国内外也有非常多的优秀产品如Runway AI、Pika AI 、可灵King AI、通义千问、智谱的文生视频模型等等。为了方便调用,这篇博客也尝试了使用 PyPI的text2video的python库的Wrapper类进行调用,下面会给大家介绍一下Huggingface Text to Video Pipeline的调用方式以及使用通用的text2video的python库调用方式。
|
3月前
|
自然语言处理 机器人 API
【Azure 机器人】微软Azure Bot 编辑器系列(4) : 使用语言生成功能[LG: Language Generation] (The Bot Framework Composer tutorials)
【Azure 机器人】微软Azure Bot 编辑器系列(4) : 使用语言生成功能[LG: Language Generation] (The Bot Framework Composer tutorials)
|
6月前
火山中文编程 -- 实现键盘HOOK
火山中文编程 -- 实现键盘HOOK
36 0
|
6月前
|
存储 数据可视化 定位技术
Google Earth Engine谷歌地球引擎GEE栅格数据图层可视化设置代码嵌入
Google Earth Engine谷歌地球引擎GEE栅格数据图层可视化设置代码嵌入
131 1
|
人工智能 前端开发 UED
如何丝滑实现 ChatGPT 打字机流式回复?Server-Sent Events!
如何丝滑实现 ChatGPT 打字机流式回复?Server-Sent Events!
1034 0
|
机器学习/深度学习 人工智能 自然语言处理
7 Papers & Radios | MiniGPT-4看图聊天、还能草图建网站;视频版Stable Diffusion来了
7 Papers & Radios | MiniGPT-4看图聊天、还能草图建网站;视频版Stable Diffusion来了
110 0
|
机器学习/深度学习 编解码 人工智能
7 Papers & Radios | MIT深度学习框架登Nature封面;2010年以来,ML算力需求增100亿倍(1)
7 Papers & Radios | MIT深度学习框架登Nature封面;2010年以来,ML算力需求增100亿倍
123 0
|
机器学习/深度学习 编解码 人工智能
7 Papers & Radios | MIT深度学习框架登Nature封面;2010年以来,ML算力需求增100亿倍(2)
7 Papers & Radios | MIT深度学习框架登Nature封面;2010年以来,ML算力需求增100亿倍