A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© q55964133 中级黑马   /  2014-7-12 17:49  /  1748 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 q55964133 于 2014-7-13 13:57 编辑
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             int width = panel1.Width / 109;
  4.             int col = 20 / width;   
  5.             int colsy = 20 % width;   
  6.             for (int i = 0; i < width; i++)
  7.             {
  8.                 for (int y = 0; y < col; y++)
  9.                 {
  10.                     Draw(i, y);

  11.                 }
  12.             }
  13.             for (int z = 0; z < colsy; z++)
  14.             {
  15.                 Draw( z, col);
  16.             }

  17.         }



  18.         public void Draw(int x, int y)
  19.         {
  20.             Graphics g = Graphics.FromHwnd(panel1.Handle);

  21.             g.DrawRectangle(Pens.Black, new Rectangle(x * 108, y * 108, 100, 100));

  22.             //g.DrawString("第一", new Font("宋体", 12), new SolidBrush(Color.Red), new PointF(0, 0));
  23.         }
复制代码




这个可以画出来可是一缩小  再打开出来就没了
还有画出来的时候  这个可不可以弄往下拉。。。不然下面还看不到

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

10 个回复

倒序浏览
在Panle的Paint 事件中 添加重画代码,注意Paint 事件在每次重绘Panle窗体的时候都会触发,所以要控制好重画方块的代码,这个你具体设置吧
关于滚动条只要设置panle的AutoScroll属性为true就行了
回复 使用道具 举报
_xixi_ 发表于 2014-7-12 20:19
在Panle的Paint 事件中 添加重画代码,注意Paint 事件在每次重绘Panle窗体的时候都会触发,所以要控制好重 ...

e .............
可以详细说下怎么弄么
那个设置true
画出来后一样不可以往下拉。。。。
回复 使用道具 举报
由于Panle控件是根据内部容器的大小来判断需不需要滚动条的,所以,你要再创建一个panle2,把panle2的Autosize属性值设置为true;把你现在的panle1放到panle2里面,在panle1里面的所有方块的所占空间超过你panle1的大小以后,调整panle1的大小。
怎么使滚动条拖下来的时候,不会出现后面还有没画好的方块,我也说下我的想法吧,可以在panle的Paint事件里面判断滚动条的偏移位置,

偏移位置大于0,则触发重画,而当偏移量为0的时候,根据 g 来判断,具体看下面代码:
  1. namespace e
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }

  9.         Graphics g;
  10.         int width;
  11.         int col;
  12.         int colsy;

  13.         public void Draw()
  14.         {

  15.             for (int i = 0; i < width; i++)
  16.             {
  17.                 for (int y = 0; y < col; y++)
  18.                 {
  19.                     g.DrawRectangle(Pens.Black, new Rectangle(i * 108, y * 108, 100, 100));
  20.                 }
  21.             }

  22.             for (int z = 0; z < colsy; z++)
  23.             {
  24.                 g.DrawRectangle(Pens.Red, new Rectangle(z * 108, colsy * 108, 100, 100));
  25.             }
  26.         }

  27.         private void button1_Click_1(object sender, EventArgs e)
  28.         {

  29.             width = panel1.Width / 109;
  30.             col = 20 / width;
  31.             colsy = 21 % width;//好吧,不知道这个有什么用!
  32.             this.panel1.Height = col * 109;

  33.             //这里永远不会大于width的
  34.             if (colsy>width)
  35.             {
  36.                 this.panel1.Width += (colsy-width) * 109;
  37.             }
  38.             
  39.             g = Graphics.FromHwnd(panel1.Handle);//g只有在按下按钮的时候才会有引用对象
  40.             Draw();
  41.         }

  42.         private void panel1_Paint(object sender, PaintEventArgs e)
  43.         {
  44.             //当g为空或没有移动滚动条的时候不重画!
  45.             if (g != null || this.panel2.HorizontalScroll.Value > 0 || this.panel2.VerticalScroll.Value > 0)
  46.             {
  47.                 Draw();
  48.             }
  49.         }
  50.     }
  51. }
复制代码



1.jpg (66.47 KB, 下载次数: 11)

效果图

效果图

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
_xixi_ 发表于 2014-7-13 16:42
由于Panle控件是根据内部容器的大小来判断需不需要滚动条的,所以,你要再创建一个panle2,把panle2的Autos ...

视频里面有讲这个东西吗?
回复 使用道具 举报
你好强大啊
回复 使用道具 举报
_xixi_ 发表于 2014-7-13 16:42
由于Panle控件是根据内部容器的大小来判断需不需要滚动条的,所以,你要再创建一个panle2,把panle2的Autos ...

谢谢啦
自己处理好了。。。
回复 使用道具 举报
_xixi_ 中级黑马 2014-7-13 22:08:05
8#
向晓伟 发表于 2014-7-13 16:46
视频里面有讲这个东西吗?

好像没讲,我是弄过类似的~有宝贵意见,希望能够互相指点~
回复 使用道具 举报
_xixi_ 发表于 2014-7-13 22:08
好像没讲,我是弄过类似的~有宝贵意见,希望能够互相指点~

哥 快点移到http://bbs.itheima.com/thread-129415-1-1.html

点评

⊙﹏⊙用二维数组行吗,每次都遍历一次一行,用两个for循环,外循环判断是否有满足当前要替换的个数,如果有的话内循环进行替换,初步想法~  发表于 2014-7-13 22:17
回复 使用道具 举报
_xixi_ 发表于 2014-7-13 22:08
好像没讲,我是弄过类似的~有宝贵意见,希望能够互相指点~

哥 你先移到那边看下。。。
源码下载了
我写的有点乱。。
不好意思。。。。。。
可以用别的方法实现也行 哈哈 谢谢啦
麻烦附下源码。。。
自己现在写好了。。。
替换。。。。
但有匹配的。。。还是给跳过了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马