重绘问题,急需求解,在线等

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespace自动演示皇后问题{publicpartialclassForm1:Form{publicintn;//输入的皇后个数publicfloatx;//画表格的横坐标publicfloaty;//画表格的纵坐标publicfloatd;//矩形间的间距publicboolflag;//判断合法或部分着色的返回值publicintk=0;//声明一个初始行数publicint[]c=newint[20];//声明一个数组,存放对应第k行的某一列privateImagetheImage;//要绘图的图片对象privateGraphicsg;//在图片上绘图的Graphics对象publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){//timer1.Enabled=true;//设置时间控件循环stringstr=textBox1.Text;if(str!=""){try{n=Int32.Parse(str);show();//画表格for(k=0;k<=n-1;k++)//初始化行列c[k]=0;k=0;}catch//异常处理{timer1.Enabled=false;MessageBox.Show("您的输入有误,请重新输入","提示");pictureBox1.Invalidate();pictureBox1.Update();textBox1.Clear();}}else{MessageBox.Show("请先输入皇后个数","消息框",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}privatevoidshow()//用bitmap直线画表格{theImage=newBitmap(600,800);//宽,高g=Graphics.FromImage(theImage);g.Clear(Color.White);this.pictureBox1.Image=theImage;PenBluePen=newPen(Color.Black);//用直线画指定大小的矩形floatx=25.00F;floaty=25.00F;this.d=300.00F/n;for(inti=0;i<=n;i++){PointFX1=newPointF(x+i*d,y);PointFX2=newPointF(x+i*d,y+300.00F);g.DrawLine(BluePen,X1,X2);}x=25.00F;for(intj=0;j<=n;j++){PointFY1=newPointF(x,y+j*d);PointFY2=newPointF(x+300.00F,y+j*d);g.DrawLine(BluePen,Y1,Y2);}x=25.00F;y=25.00F;BluePen.Dispose();}publicboolcanput(intk)//判断合法着色{inti;for(i=0;i<k;i++){//如果k是最后一行,而且所有棋子不在同一列及同一对角线,则为合法着色if(k==n-1&&c[k]!=c[i]&&c[i]-c[k]!=i-k&&c[i]-c[k]!=k-i){flag=true;}else//否则为非法,跳出循环{flag=false;break;}}returnflag;//返回真值}publicboolpartput(intk)//判断部分着色{inti;for(i=0;i<k;i++){//如果并没有摆放完N个棋子,而且满足摆放的棋子不在同一列及同一对角线,则为部分着色if(c[k]!=c[i]&&c[i]-c[k]!=i-k&&c[i]-c[k]!=k-i){flag=true;}else//否则为非法,跳出循环{flag=false;break;}}returnflag;//返回真值}各位大哥,我是新手,我想在填充颜色的时候,窗口最小化的话,不会使颜色消失掉,但是不知道该怎么写这样的重绘,谢谢帮忙哈,还有部分代码,马上贴上来。

解决方案

解决方案二:
privatevoidbutton2_Click(objectsender,EventArgse)//执行下一步按钮{if(timer1.Enabled==true)//如果时间控件在循环,则提示用户{MessageBox.Show("请先按暂停键","提示");}else//{Graphicsgf=pictureBox1.CreateGraphics();//绘图对象SolidBrushmyBrush=newSolidBrush(Color.Red);//画刷SolidBrushmyBrush2=newSolidBrush(Color.White);//画刷if(k>=0){if(c[k]<=n-1){c[k]=c[k]+1;gf.FillRectangle(myBrush2,25.00F+(c[k]-2)*d+5,25.00F+k*d+5,d-10,d-10);gf.FillRectangle(myBrush,25.00F+(c[k]-1)*d+5,25.00F+k*d+5,d-10,d-10);if(k==0)//第一行为部分着色{gf.FillRectangle(myBrush,25.00F+(c[k]-1)*d+5,25.00F+k*d+5,d-10,d-10);k=k+1;}else{if(canput(k))//当为合法着色{MessageBox.Show("恭喜输出正确结果","消息框");}elseif(partput(k))//当为部分着色{k=k+1;}}}else{gf.FillRectangle(myBrush2,25.00F+(c[k]-1)*d+5,25.00F+k*d+5,d-10,d-10);c[k]=0;k-=1;}}else{if(n==0||n==2||n==3){MessageBox.Show("此问题无解","提示");timer1.Dispose();}else{MessageBox.Show("全部过程演示完毕","提示");timer1.Dispose();return;}}myBrush.Dispose();myBrush2.Dispose();}}///<summary>///时间控件,执行与“下一步”按钮相同的操作///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidtimer1_Tick(objectsender,EventArgse){Graphicsgf=pictureBox1.CreateGraphics();SolidBrushmyBrush=newSolidBrush(Color.Red);SolidBrushmyBrush2=newSolidBrush(Color.White);if(k>=0){if(c[k]<=n-1){c[k]=c[k]+1;gf.FillRectangle(myBrush2,25.00F+(c[k]-2)*d+5,25.00F+k*d+5,d-10,d-10);gf.FillRectangle(myBrush,25.00F+(c[k]-1)*d+5,25.00F+k*d+5,d-10,d-10);if(k==0)//第一行为部分着色{gf.FillRectangle(myBrush,25.00F+(c[k]-1)*d+5,25.00F+k*d+5,d-10,d-10);k=k+1;}else{if(canput(k))//当为合法着色{timer1.Enabled=false;MessageBox.Show("恭喜输出正确结果","消息框");}elseif(partput(k))//当为部分着色{k=k+1;}}}else{gf.FillRectangle(myBrush2,25.00F+(c[k]-1)*d+5,25.00F+k*d+5,d-10,d-10);c[k]=0;k-=1;}}else{if(n==0||n==2||n==3){timer1.Enabled=false;//计时器停止循环MessageBox.Show("此问题无解","提示");timer1.Dispose();return;}else{timer1.Enabled=false;MessageBox.Show("全部过程演示完毕","提示");timer1.Dispose();return;}}myBrush.Dispose();myBrush2.Dispose();}///<summary>///暂停///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbutton3_Click(objectsender,EventArgse){timer1.Enabled=false;}///<summary>///继续///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbutton4_Click(objectsender,EventArgse){timer1.Enabled=true;}}}
解决方案三:
友情up
解决方案四:
谢谢```唉,这个问题我也不知道怎么说,只好把代码都贴上来了,望大家海涵哈...
解决方案五:
如果觉得分不够,我可以加啊~只希望有人能解决噢```
解决方案六:
好象都没有正义之士啊~

时间: 2024-11-02 18:24:21

重绘问题,急需求解,在线等的相关文章

绘制直线的重绘问题

问题描述 我在做一个简单的画板,做到了绘制知道的地方,但是再画第二次直线的时候就会把前面的一条直线给擦掉,请问谁有关于直线重绘的代码,帮忙给我介绍一下呀,急需! 解决方案 解决方案二:你没说你用什么方法绘制的,如果可以,请贴出关键代码解决方案三:privatevoidpictureBox1_MouseMove(objectsender,System.Windows.Forms.MouseEventArgse){if(drawing){Graphicsg=this.pictureBox1.Crea

请教一个重绘操作的做法,以zedGraph为背景做GDI画图,重绘事件怎么处理

问题描述 具体代码如下,已经实现图形平移,但是图形被覆盖时,重绘事件做不出来,有知道的吗,敬请指教usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingZedGraph;usingSystem.Drawing.Imaging;usingSys

C#中用“橡皮条”法绘图和重绘

前些日子在论坛上发了个帖子,100分寻求"橡皮条"法绘图的代码.效果不是很好,于是自己参照网友给的代码重新写了一个,解决了绘图与重绘的问题.由于只写了部分,所以功能有限,同时可能算法不是很好,希望大家指点!!窗体中仅包含一个pictrueBox1,先将代码付诸于下:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Form

用SetStyle方法重绘你的窗体

鲜为人知的SetStyle方法可以让你控制重绘一个窗体的方式. by Ken Getz 注:Ken Getz在Orlando的VSLive!上同Brian Randell一起举办了一个主题为"Build a Rich Client App with Visual Studio .NET"的研讨会.本篇技巧选自该研讨会的资料.运用GDI+和Windows窗体,我们可以很容易地创建一个渐变色(gradient)来填充一个区域.运用.NET Framework提供的简单的方法,你可以创建li

Win32开发入门(3) 窗口的重绘

我们今天来吹一下关于窗口重绘的事情,在开始吹牛之前,我们先用上一篇博文中说到的方法写一 个简单的Win32应用程序.代码如下: #include <Windows.h> //先声明一下消息处理函数 LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // 入口点 int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrvInst

WinForm中重绘滚动条以及用重绘的滚动条控制ListBox的滚动

在本人的上一篇随笔<<高仿QQMusic播放器,浅谈WinForm关于UI的制作 >>一文中,本人对播放器列表右边的灰色滚动条极为不满意,也影响到整个 软件UI的协调性,遂下决心要重绘一个符合自己UI风格的滚动条. 查了很多资料,都找不到直接重写ListBox滚动条的方法,只能曲线救国,先自己 重绘一个带皮肤的滚动条,然后让它取代ListBox现有的滚动条. 老习惯,先传个效果图,你觉得感兴趣就继续看下去,不喜欢的话就此打住, 懒得耽误你宝 贵的时间,嘿嘿 注意,此图中的滚动条宽度

PS矢量造型工具重绘标志

教程教朋友们用PS矢量造型工具重绘标志,教程属于比较简单的工具介绍,难度一般. 记得刚开始上班时,每个月要买100元左右的书,最开心的事就是买到好书回家连夜看,时间久了,设计类这行的书越来越多,越看越迷茫,好书特别是适合初学者的书太少,雷同的东西太多,后来就没那个逛书店的心,也没见过市面出过什么好书,但每次看到别人做得好的作品总是在猜想人家是怎么学的.大凡写书的人太过注重商业利益为用户考虑得太少的缘故?能静下心来做研究的又有多少人呢?为了弥补自己曾经的遗憾,特为初学者写点粗浅的教程,如让高手见笑

自定义jQuery插件方式实现强制对象重绘的方法

 这篇文章主要介绍了自定义jQuery插件方式实现强制对象重绘的方法,实例分析了jQuery插件及对象重绘的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了自定义jQuery插件方式实现强制对象重绘的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 jQuery.fn.redraw = function(){ jQuery(this).each(function(){ this.style.display='none'; this.off

使用DriectShow.Net显示视频,长时间之后报重绘错误

问题描述 使用DirectShow.Net库显示两个摄像头视频,方法比较古老.简单,就是:使用两个线程,循环读图像,赋给容器,最近测试人员发现,运行一段时间后会报重绘错误,以前长时测试没有发现.还有一个新问题,就是:整个UI刷新变慢,比较卡.虽然这种赋图像的方法,效率比较低,但是以前都没有刷新慢的问题.voidCaptureAHandle(){while(runningA){camAWaitEvent.WaitOne();Bitmapimage=null;IntPtrip=IntPtr.Zero