问题描述
上图的方框是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全部为背景色为红色;点t1,再点t5,t1,t2,t3,t4,t5背景色为红色;比如2:点t1,再点t49(第5层的01排),那么t1,t13,t25,t37,t49全部为红色;高手们帮下小弟咯,搞定了的打开http://topic.csdn.net/u/20080623/14/3183c800-f5ea-4b94-9cc2-74f51c2de820.html发表下,再给100分啊。。
解决方案
解决方案二:
mark,下午有时间帮你搞搞
解决方案三:
引用1楼ojlovecd的回复:
mark,下午有时间帮你搞搞
谢谢,我脑瓜子弄不好算法东西。。唉
解决方案四:
有没有可能说点T1和T15这样第一行到第二行的T15都要红色的?
解决方案五:
首先明确2个问题:(1),是不是必须先点小号的,再点大号的?(2),是不是2次点击的必须要在同一行或同一列?
解决方案六:
这个应该不算很难,晚上要是有时间帮你写一下。不知道你实现的效果是不是类似于在windows资源管理器窗口中,用Shift选中文件的感觉。
解决方案七:
intiMoto;privatevoidtextbox_Click(objectsender,EventArgse)if(iMoto==0){iMoto=GetIndex(sender);returnl}if(GetIndex(sender)-1)/12=c-1/12);{把同行的变色}if(GetIndex(sender)-1)%12=c-1%12);{把同列的变色}privateintGetIndex(objectobj){//取"tXX"中的XXreturnConvert.ToInt32(((TextBox)obj).Name.SubString(1))}
解决方案八:
引用3楼zzyhuian06142的回复:
有没有可能说点T1和T15这样第一行到第二行的T15都要红色的?
另:如果t1,t2,t3是红色,那么现在点了t1,,,,t15,是不是t1,t2,t3要变白色啊?顶下先,现在没有时间,等会帮你写,感觉不难的啊。
解决方案九:
引用3楼zzyhuian06142的回复:
有没有可能说点T1和T15这样第一行到第二行的T15都要红色的?
T15是第2层的,不要红色。。
解决方案十:
引用7楼RonoTian的回复:
引用3楼zzyhuian06142的回复:有没有可能说点T1和T15这样第一行到第二行的T15都要红色的?另:如果t1,t2,t3是红色,那么现在点了t1,,,,t15,是不是t1,t2,t3要变白色啊?顶下先,现在没有时间,等会帮你写,感觉不难的啊。
如果t1,t2,t3是红色,那么现在点了t1,,,,t15,是不是t1,t2,t3要变白色啊?t1,t2,t3当然还是红色的啊。
解决方案十一:
引用3楼zzyhuian06142的回复:
有没有可能说点T1和T15这样第一行到第二行的T15都要红色的?
点t1和t15,t1,t2,t3,t13,t14,t15变红色.点t1和t60则全部为红色;
解决方案十二:
这个简单,就象做过的一个高尔夫球的打位管理一样。
解决方案十三:
实现鼠标拖拉式publicpartialclassForm1:Form{intpointX=0;intpointY=0;inttop,buttom,left,right;publicForm1(){InitializeComponent();}privatevoidForm1_MouseDown(objectsender,MouseEventArgse){pointX=e.X;pointY=e.Y;}privatevoidForm1_MouseUp(objectsender,MouseEventArgse){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);}privatevoidSetRed(TextBoxtb){if(tb.Top+tb.Size.Height>top&&tb.Right>left&&tb.Top<buttom&&tb.Left<right){tb.BackColor=Color.Red;}}/*privatevoidbutton1_Click(objectsender,EventArgse){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+=newMouseEventHandler(Form1_MouseDown);this.groupBox1.MouseUp+=newMouseEventHandler(Form1_MouseUp);
2、//SetRed(textBox1);//SetRed(textBox2);//SetRed(textBox3);//SetRed(textBox4);//SetRed(textBox5);foreach(Controlcolinthis.groupBox1.Controls){if(col.GetType()==typeof(TextBox))SetRed((TextBox)col);}
解决方案十五:
9楼的方法确实是实现了拖拉效果,//SetRed(textBox1);//SetRed(textBox2);//SetRed(textBox3);//SetRed(textBox4);//SetRed(textBox5);必须放到按钮的点击事件里才行哦。放在MouseUp事件里好像没用。
解决方案:
s330481,你从t1拖到t3只有t1,t2,t3变红色?t4,t5不会?我拿你代码贴上去,怎么弄都是t1,t2,t3,t4,t5全变红色
解决方案:
引用15楼My_xinshou的回复:
s330481,你从t1拖到t3只有t1,t2,t3变红色?t4,t5不会?我拿你代码贴上去,怎么弄都是t1,t2,t3,t4,t5全变红色
晕,我把SetRed(textBox1);。。。。。。。。。写到鼠标点击事件里面去了
解决方案:
首先你命名的就不好,为什么要从t1一直到t60呢?这样你下面这个算法写起来多麻烦。如果我是你,我会新建一个TextBox的二维数组,TextBox[][]t=newTextBox[5][12];for(inti=0;i<5;i++)for(intj=0;j<12;j++)t[i][j]=newTextBox();//下面设置位置和点击相应参数也是用循环设定。此处略去
然后你的算法就很容易实现了嘛,比如你第一下点的是t[i1][j1],第二下点的是t[i2][j2]for(inti1=0;i<i2;i++)for(intj1=0;j<j2;j++)t[i][j].Color=Color.red;
这样不就行了,我没有编译器,所以只能说个大概思路,不能帮你调试通过了。
解决方案:
对噢,二维数组。。但是我还是不知道怎么实现。根据你的思路再想想
解决方案:
唉,我还没用过数组。
解决方案:
TextBox[][]t=newTextBox[5][12];这句话是c++的写法,C#中的写法应该是TextBox[,]t=newTextBox[5,12];
解决方案:
你所有的TextBox几乎一样,形状,大小,处理函数……除了位置是顺序变化的,我看不出不用数组的理由