伊莉討論區

標題: picturebox畫線 [打印本頁]

作者: cm101115    時間: 2017-12-5 02:54 AM     標題: picturebox畫線

請問各位
為何我把drawline那一行改放到button1_Click中
按button1時卻無任何反應
  1. public partial class Form1 : Form
  2.     {
  3.         Graphics g;        
  4.         public Form1()
  5.         {            
  6.             InitializeComponent();
  7.             pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
  8.             g = Graphics.FromImage(pictureBox1.Image);
  9.             g.Clear(Color.White);
  10.             g.DrawLine(new Pen(Color.Black), 0, 0, pictureBox1.Width, pictureBox1.Height);
  11.         }

  12.         private void pictureBox1_Click(object sender, EventArgs e)
  13.         {
  14.         }
  15.         private void button1_Click(object sender, EventArgs e)
  16.         {                  
  17.         }
複製代碼

作者: sggleeee    時間: 2017-12-5 01:41 PM

大大試試這段代碼看看.......
  1.         Graphics g;

  2.         public Form1()
  3.         {
  4.             InitializeComponent();
  5.             
  6.             g = pictureBox1.CreateGraphics();  //Create Graphics
  7.             pictureBox1.BackColor = Color.White;            
  8.         }

  9.         private void button1_Click(object sender, EventArgs e)
  10.         {
  11.             g.DrawLine(new Pen(Color.Black), 0, 0, pictureBox1.Width, pictureBox1.Height);            
  12.         }
複製代碼

作者: kilean    時間: 2018-2-23 03:46 PM

回樓主,畫完補上 pictureBox1.Refresh();
讓pictureBox1觸發Paint的Event就可以了。
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);也會觸發
而建立在Image上的Graphics畫圖不會觸發pictureBox1的Paint,為什麼?
你每畫一個東西就觸發Paint,那效率就很差,
它這麼設計是要你畫完全部的東西再來處發pictureBox1的Paint。

sggleeee的方式會有觸發Paint消失的問題。
Paint觸發主要是從Image顯示到PictureBox上。
因此要用這方法,建議程式打在Paint裡,
用e.Graphics畫就可以了,連CreateGraphics都不用。

作者: sggleeee    時間: 2018-2-23 10:07 PM

kilean 發表於 2018-2-23 03:46 PM
回樓主,畫完補上 pictureBox1.Refresh();
讓pictureBox1觸發Paint的Event就可以了。
pictureBox1.Image = ...

之前回答時只著眼於為何沒反應,而忽略其他的部分....
非常感謝Kilean大大的補充說明與修正~~~




歡迎光臨 伊莉討論區 (http://www77.eyny.com/) Powered by Discuz!