有时间+有兴趣的高手进来帮菜鸟解决个很伤脑筋的问题.........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键按下了,那么就可以一行或全部选中 --------------------编程问答--------------------
唉,搞不懂你说的啊。贴点加注释的代码参考下啊 --------------------编程问答-------------------- 按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);
}
GDI? 我认识他,他不认识我啊。。
哪里有GDI教程?后期我要还用GDI画图的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 我看了别人的一个项目,但没有代码的。也是我说的那样实现功能的。 --------------------编程问答-------------------- 实是可以实现,不过感觉有点麻烦
把拖拉过程分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);--------------------编程问答-------------------- 看看我在http://topic.csdn.net/u/20080624/13/ed48ed81-d918-473c-9722-ae21be13be10.html的回帖吧
//SetRed(textBox2);
//SetRed(textBox3);
//SetRed(textBox4);
//SetRed(textBox5);
foreach (Control col in this.groupBox1.Controls)
{
if (col.GetType() == typeof(TextBox))
SetRed((TextBox)col);
}
补充:.NET技术 , C#