当前位置:编程学习 > C#/ASP.NET >>

有时间+有兴趣的高手进来帮菜鸟解决个很伤脑筋的问题.........N个TextBox怎么实现实现拖拉式(+算法)的效果?


上图的方框是TextBox(60个TextBox,从第1层第01排开始:t1,t2,t3...一直到t12,第2行t13,t14...t24以此类推),点第1次为红色(值为1),点第2次为白色(值为0),第3次为红色(值为1),第4次为白色(值为0);
问题描述:
我这样每个TextBox都要去点1次很麻烦.
比如1:我点t1,再去点t12,那么t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12全部为红色;
比如2:点t1,再点t49(第5层的01排),那么t1,t13,t25,t37,t49全部为红色;

或者能不能实现拖拉式的效果?
鼠标点着t1不放,鼠标移动t12...t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12全部为红色;
高手们,这要怎么实现呀?

--------------------编程问答-------------------- 首先你可以得到是否按下了shift键,然后你点击t1的时候记下first是谁,然后看second是不是t12获知t49,然后如果shift键按下了,那么就可以一行或全部选中 --------------------编程问答--------------------
引用 1 楼 fuadam 的回复:
首先你可以得到是否按下了shift键,然后你点击t1的时候记下first是谁,然后看second是不是t12获知t49,然后如果shift键按下了,那么就可以一行或全部选中


唉,搞不懂你说的啊。贴点加注释的代码参考下啊 --------------------编程问答-------------------- 按shift键?为什么要去按shift键呢? 不理解。 那不是一样要去一个一个的点? --------------------编程问答-------------------- 你点击第一个Textbox时记录到first中
点击第二个textbox时记录到second中,然后判断是否同时按着shift键
然后如果textbox的id是t12,那么t1到12这些全变色,如果是t49全都变

这个思路多明确,代码不难啊 --------------------编程问答-------------------- 用gdi实现比较好点:textbox用矩形框代替,用数组记住每个矩形框的始点位置,然后实现画布或窗口的鼠标拖拽事件。 --------------------编程问答-------------------- 这样行不行?
当鼠标停在TextBox上面几秒时,如果是白色则变为红色,反之变为白色。
(需要注册每个TextBox的MouseHover事件)

private void TextBox_MouseHover(object sender, EventArgs e)
        {
            ((TextBox)sender).BackColor = (((TextBox)sender).BackColor == Color.Red ? Color.White : Color.Red);
        }
--------------------编程问答--------------------
引用 5 楼 csdnshao 的回复:
用gdi实现比较好点:textbox用矩形框代替,用数组记住每个矩形框的始点位置,然后实现画布或窗口的鼠标拖拽事件。

GDI? 我认识他,他不认识我啊。。  
哪里有GDI教程?后期我要还用GDI画图的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 我看了别人的一个项目,但没有代码的。也是我说的那样实现功能的。 --------------------编程问答-------------------- 实是可以实现,不过感觉有点麻烦
把拖拉过程分2步,mousedown mouseup两个事件
mousedown事件中获取鼠标坐标1
mouseup事件获取鼠标坐标2,遍历testbox控键,判断是否在两个鼠标坐标间的区域内,在的就变色 --------------------编程问答--------------------
引用 10 楼 s330481 的回复:
实是可以实现,不过感觉有点麻烦 
把拖拉过程分2步,mousedown mouseup两个事件 
mousedown事件中获取鼠标坐标1 
mouseup事件获取鼠标坐标2,遍历testbox控键,判断是否在两个鼠标坐标间的区域内,在的就变色


能贴点代码么?大哥 --------------------编程问答-------------------- 实现鼠标拖拉式

 

public partial class Form1 : Form
    {
        int pointX = 0;
        int pointY = 0;
        int top, buttom, left, right;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            pointX = e.X;
            pointY = e.Y;
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            top = e.Y < pointY ? e.Y : pointY;
            buttom = e.Y > pointY ? e.Y : pointY;
            left = e.X < pointX ? e.X : pointX;
            right = e.X > pointX ? e.X : pointX;
            SetRed(textBox1);
            SetRed(textBox2);
            SetRed(textBox3);
            SetRed(textBox4);
            SetRed(textBox5);
            
        }
        private void SetRed(TextBox tb)
        {
            if (tb.Top + tb.Size.Height > top && tb.Right > left && tb.Top < buttom && tb.Left < right)             
            {
                tb.BackColor = Color.Red;
            }
        }

        /*
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.BackColor = Color.White;
            textBox2.BackColor = Color.White;
            textBox3.BackColor = Color.White;
            textBox4.BackColor = Color.White;
            textBox5.BackColor = Color.White;
        }*/
    }




做了5个textbox测试没什么问题 --------------------编程问答-------------------- 我来完善一下楼上的
1、窗体Load中加入
this.groupBox1.MouseDown += new MouseEventHandler(Form1_MouseDown);
this.groupBox1.MouseUp += new MouseEventHandler(Form1_MouseUp);

2、
            
//SetRed(textBox1);
            //SetRed(textBox2);
            //SetRed(textBox3);
            //SetRed(textBox4);
            //SetRed(textBox5);
            foreach (Control col in this.groupBox1.Controls)
            {
                if (col.GetType() == typeof(TextBox))
                    SetRed((TextBox)col);
            }
--------------------编程问答-------------------- 看看我在http://topic.csdn.net/u/20080624/13/ed48ed81-d918-473c-9722-ae21be13be10.html的回帖吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,